P00575. 求约数之和3之完美数

发布时间 2023-09-07 18:11:44作者: 我微笑不代表我快乐

 

下面这个代码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;
}