已知一个正整数N(20 ≤ N ≤ 1,000,000,000),请你编写程序求出该数的全部因子(不包括1和其它本身)的和。
因子求和
题目描述
已知一个正整数N(20 ≤ N ≤ 1,000,000,000),请你编写程序求出该数的全部因子(不包括1和其它本身)的和。
输入
一个整数N。
输出
一个整数,表示因子的和。
样例输入
24
样例输出
35
时间限制: 1 Sec 内存限制: 128 MB
我的代码超时了,虽然这也是必然。。
#pragma GCC optimize(1) #pragma GCC optimize(2) #pragma GCC optimize(3) #include<cstdio> using namespace std; int i; int n; inline bool check(int); int main() { scanf("%d", &n); long long sum=0; for(i=2; i<n; i++) { if(check(i)) sum+=i; } printf("%lld", sum); return 0; } inline bool check(int x) { int a=n/i; if(a*i!=n) return false; return true; }
这样的代码时间复杂度为O(n-2),显然会超时,那么用什么算法能AC这道题呢?大佬们最好在回答的时候将思路讲出来,最好把主要的代码贴出来,谢谢!
我已经解决了!在for循环内的循环条件应该是i<sqrt(n),这样就不会超时了!