问题标题: 酷町堂:2685 条件

1
0
已解决
张舒斌
张舒斌
中级光能
中级光能

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,sum;
    cin>>n;
    sum=n+1;
    for(int i=2;i<=n/2;i++)
    {
        if(n%i==0)
        {
            sum+=i;
        }
    }
    cout<<sum;
    return 0;
}
90分超时代码,请问还有什么地方可以优化???


0
已采纳
宫西诚
宫西诚
修练者
修练者

你好,张舒斌,郑怡翔,

这题不能直接暴力枚举,循环条件为1到n的开平方,

因为一个数例如16,的因数有,1*16,2*8,4*4;

分别为1,2,4,8,16

也就是说,当n模i为零,输出这个数和n除以这个数

 上代码

  long long ans=0;
   for(int i=1;i<=sqrt(n);i++)
    {
           if(n%i==0)
        {
            ans+=i;//先加上此数
        }
        if(n/i!=i)
         ans+=n/i;//如果不是他的平方数,加它的因数,为了防止平方数累计相加,如16,运行到4时,只加一个4
}
cout<<ans;
}

有什么不会的接着问我

0
0
郑怡翔
郑怡翔
初级天翼
初级天翼

这道是作业题,你问?我是60分,也超时了......

郑怡翔在2018-07-23 14:10:39追加了内容

用long long定义变量试试

郑怡翔在2018-07-23 14:12:23追加了内容

好吧,不行

我要回答