下面这个代码TLE了,因为做除法的速度比做乘法慢4到5倍 。
#include <bits/stdc++.h> using namespace std; long long a,b,ans,f[10000001]; int main() { cin>>a>>b; for(long long i=1;i<=b/i;i++) for(long long j=i;j<=b/i;j++) { if(i==j) f[i*j]+=i; else f[i*j]+=(i+j); } for(int i=a;i<=b;i++) ans=ans+abs(2*i-f[i]); cout<<abs(ans); return 0; }
这个程序过了
#include <bits/stdc++.h> using namespace std; long long a,b,ans,f[10000001]; int main() { cin>>a>>b; for(long long i=1;i*i<=b;i++) { for(long j=i;i*j<=b;j++) { if(i==j) f[i*j]+=i; else f[i*j]+=(i+j); } } for(long long i=a;i<=b;i++) ans+=abs(i*2-f[i]); cout<<abs(ans); return 0; }
这个也行。
#include <bits/stdc++.h> using namespace std; long long a,b,ans,f[10000001]; int main() { cin>>a>>b; int tot=sqrt(b); for(int i=1;i<=tot;i++) { for(int j=i;i*j<=b;j++) { if(i==j) f[i*j]+=i; else f[i*j]+=(i+j); } } for(int i=a;i<=b;i++) ans+=abs(i*2-f[i]); cout<<abs(ans); return 0; }
标签:约数,10000001,include,完美,namespace,long,int,ans,P00575 From: https://www.cnblogs.com/cutemush/p/17685748.html