p1927

哇这题坑是真的多,虽然很警惕还是交了三次。

以前没好好看题还以为超级超级难,就一直没做。今天写了一下觉得就还好,思路好想,不被坑难。

一句话题意:找到大于等于n的约数和的约数和等于自己的第一个数,输出它和它的约数和。

看到s<=18000就可以上一个暴力,枚举每个因数i,i的倍数的那些数的sum[k*i]+=i就好了,复杂度还说的过去。

那么我菜在哪呢?首先

忽略那些自己是自己的“非常好友”的情况

这句话没写上去,10分没了。

然后虽然n<=18000但是答案一定比18000大,然而我只处理到了18000,还怪蠢了。偷偷看了一眼数据,发现处理到20000就好了。

而且sum[i*k]也是有可能很大的,再拿着sum[sum[i*k]]去比较就会越界了。

最后还是交了三遍才过。

真是菜啊。

复杂度是O(跑得过)

int i,f;
int n;
int o[20010];
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("123.in","r",stdin);
//freopen("123.out","w",stdout);
    cin>>n;
    
    for(i=1;i<=10000;i++)
        for(f=2*i;f<=20000;f+=i)
            o[f]+=i;
    for(i=n;;i++)
    {
        if(o[i]>=20000) continue;
        if(i==o[o[i]]&&i!=o[i])
        {
            cout<<i<<' '<<o[i];
            return 0;
        }
    }
}
原文地址:https://www.cnblogs.com/qywyt/p/9459546.html