问题标题: 酷町堂:2685 条件?(70分)超时了!

0
0
已解决
王光裕
王光裕
资深光能
资深光能

代码:

#include<iostream>
#include<cstring>
#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
    int n;
  cin>>n;
  long sum=0;
  for(int i=1;i<=n;i++)
   if(!(n%i))
    sum+=i;
  cout<<sum<<endl;
}

0
已采纳
李祈乐
李祈乐
新手光能
新手光能

数据范围太大了,一直循环下去可能会超时,这里考虑到:如果n能整除i,也就是i*()==n,n能整除i,i*()就等于n,括号里的数也能被n整除,()表示出来就是n/i,循环从n的平方根开始,即:

 for(int i=1;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            ans+=i+n/i;
        }

 

0
我要回答