问题标题: 酷町堂:5543//申明

0
2
董宇昊
董宇昊
初级启示者
初级启示者
#include<iostream>
#include<cmath>
using namespace std;
int sum;
int main(){
    int n,t[500005];
    cin>>n;
    for(int i=1;i<=n;i++) cin>>t[i];
    for(int i=1;i<=n;i++){
        for(int j=1;j<=sqrt(t[i]);j++){
            if(t[i]%j==0){
                sum+=j;
                sum+=t[i]/j;
            }
        }
        cout<<sum<<endl;
    }
    return 0;
}
为什么20分?


5543   数字游戏(number)
经验值:1200
不许抄袭,一旦发现,直接清空经验!
题目描述 Description
小萱萱刚学习完约数的知识,一个数的约数指能整除这个数的正整数。周末,小萱萱和几个朋友一起玩耍,刚学习完约数知识的小萱萱迫不及待的想给小朋友们展示一下她的本领,她和几个朋友一起玩起了这样一个游戏:给你一个整数N,需要算出这个数所有的约数的和。例如15的数有1, 3, 5, 15。所以15的约数和为1+3+5+15=24.

输入描述 Input Description
本题有多组数据,第一行一个T,表示有T组数据;下面T行,每行一个正整数N,表示要处理的数。

输出描述 Output Description
T行,每行一个正整数,表示输入中对应的数的约数和。

样例输入 Sample Input
1
15
样例输出 Sample Output
24
数据范围及提示 Data Size & Hint
对于20%的数据,T=1;
对于50%的数据,T≤5000;
对于80%的数据,T≤50000;
对于100%的数据,T≤500000,N≤5000000。

 

董宇昊在2020-10-22 19:47:01追加了内容

盗我号的

@王鑫烨    @那个什么凯

 

董宇昊在2020-10-22 19:54:42追加了内容

我估计我马上就会被禁言

董宇昊在2020-10-22 20:07:03追加了内容

@沙宸安 

非要我超时吗?


0
沙宸安
沙宸安
高级启示者
高级启示者

你的问题出在sum循环结束后没有清零。。。

0
李瑞曦
李瑞曦
高级天翼
高级天翼

这题需要预处理,和我有长辈那道题的思路差不多

李瑞曦在2020-10-22 19:55:17追加了内容

我还没做完,做出了告诉你,先占个位~

0
曹灿阳
曹灿阳
初级天翼
初级天翼

你的sum在每一次循环结束后要清零

0
沙宸安
沙宸安
高级启示者
高级启示者

1的约数和是2?1=1!

4的约数和是9?1+2+4=7!

再改改

0
沙宸安
沙宸安
高级启示者
高级启示者

if(t[i]%j==0){

sum+=j;

sum+=t[i]/j;

}

建议不要使用这种危险的代码,保守点用1循环到t[i]。

沙宸安在2020-10-22 20:01:47追加了内容

请您再试试

0
李瑞曦
李瑞曦
高级天翼
高级天翼

我80了

李瑞曦在2020-10-22 21:01:19追加了内容

0
李瑞曦
李瑞曦
高级天翼
高级天翼
for(int i=1;i<=5000000;i++){//预处理,运用埃氏筛的核心思想
    for(int j=i;j<=5000000;j+=i){
       s[j]+=i;
    }
}
循环t次{
    输入n
    输出s[n]并换行
}
t是t组数据
n是每组数据的那个整数
s数组》》预处理
-----------------------------------------
有事@我

 

0
余彦文
余彦文
初级光能
初级光能

用你这思路,还要考虑j和t[i]/j相等的情况

0
汪恺恒
汪恺恒
中级启示者
中级启示者

这题要预处理+输入输出优化

0
赵逸凡
赵逸凡
初级启示者
初级启示者

多组数据要维护。

顺便,偶然发现了你的头像的全部版本。

'

无语...

0
0
张恩泽
张恩泽
高级天翼
高级天翼

可以用scanf和printf来优化输入输出

0
张恩泽
张恩泽
高级天翼
高级天翼

按照李瑞曦说的方法,输入输出时用scanf和printf优化,就可AC

0
张恩泽
张恩泽
高级天翼
高级天翼

这样输入:

scanf(“%d”, T);

这样输出:

printf ("%d, s[n]");

 

记得加头文件:#include <cstdio>

0
0
李显晨
李显晨
中级启示者
中级启示者
for(int i=1;i<=5000000;i++){//预处理,运用埃氏筛的核心思想
    for(int j=i;j<=5000000;j+=i){
       s[j]+=i;
    }
}
循环t次{
    scanf("%d",&n);
    printf ("%d\n",s[n]);
}
t是t组数据
n是每组数据的那个整数
s数组》》预处理
-----------------------------------------
我在@李瑞曦的代码上进行了优化,不是抄袭

 

0
0
赵朗
赵朗
高级光能
高级光能

考的是因数质数,你用优化方法就可以了

你可以自己去问老师

老师的答案最标准

谢谢你送我一道水题!

0
杨淮乐
杨淮乐
资深守护
资深守护

李显晨的代码可以加上火车头(不加的70分)

0
0
0
被禁言 张皓轩
张皓轩
中级光能
中级光能

核心代码:for(i=1;i<=T;i++){ cin>>n; for(j=1;j<=n;j++){ if(n%j==0){ sum+=j; } } cout<<sum<<endl; sum=0; }

我要回答