求问c++关于求一个数因子和问题

图片说明
下面是我的代码,83分
耗时: 1489 ms
内存 : 1.90 MB

#include<bits/stdc++.h>
#pragma GCC target("avx")
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#define jiasu ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;
int n,s;
int main(){
s=0;
cin>>n;
if(n==1||n==0) s=0;
else{
for(int i=1;i<=n/2;i++){
    if(n%i==0) s+=i;
  }
}
cout<<s<<endl;
return 0;
}

耗时: 1489 ms,你的时间限制是 1000ms
超时了,但是超的不多

把i<=n/2换成i<=sqrt(n)试试看,应该就能过

楼上专家的说法不完全,只用sqrt判断结束的话会漏掉大于sqrt的因子,需要把循环改成如下。真诚希望评论区的兄弟好好看看在喷

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

另附一个想法,可以考虑用因子和公式的方法来计算,使用素数筛计算sqrt(n)以内的素数,这些素数都除掉后如果有剩余大于sqrt(n)啧这个数一定是素数,然后代入公式。按理说不会更快,素数筛的过程依然是O(sqrt(n)),代入公式部分应该能达到O(log(n))级别,但整体还是大于当前算法。
另外这个刷题网站是哪个啊,能给个网址不。