首页 > 其他 > 详细

p1927

时间:2018-08-11 14:27:53      阅读:151      评论:0      收藏:0      [点我收藏+]

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

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

技术分享图片

一句话题意:找到大于等于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;
        }
    }
}

 

p1927

原文:https://www.cnblogs.com/qywyt/p/9459546.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!