首页 新闻 会员 周边 捐助

一道C++的题目,大佬们来帮帮我吧QwQ

0
悬赏园豆:5 [已关闭问题] 关闭于 2018-03-10 17:44

因子求和

题目描述

已知一个正整数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这道题呢?大佬们最好在回答的时候将思路讲出来,最好把主要的代码贴出来,谢谢!

 
Aehnuwx的主页 Aehnuwx | 菜鸟二级 | 园豆:263
提问于:2018-03-10 17:31
< >
分享
所有回答(1)
0

我已经解决了!在for循环内的循环条件应该是i<sqrt(n),这样就不会超时了!

Aehnuwx | 园豆:263 (菜鸟二级) | 2018-03-10 17:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册