输出400以内的smith数,程序没有错到运行不了,希望又大佬解答下

qq_43187862 2019-09-09 07:29:47
package homework2; public class calculate { static int s; static int s1; static int s2; static int n1; public static int Sum(int a){ s=0;//每次调用更新S的值 int m; while(a!=0){ m=a%10; a=a/10; s+=m; } return s; } public static int main(String[] args) { int n; for(n=1;n<=400;n++){ s1=0; s1=Sum(n); int i=2; s2=0; //重新输入n时更新s2的值 //循环分解 while(n!=1){ if(n%i==0){ n1=n; s2+=Sum(i); n/=i; } else i++; } if(s1==s2) System.out.print(+n1); } return 0; } }
...全文
126 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-09-09
  • 打赏
  • 举报
回复
smith数是各位数字的和等于各个因子的数字和
你的
while(n!=1){
if(n%i==0){
n1=n;
s2+=Sum(i);
n/=i;
}
都改变n了,那么for(n=1;n<=400;n++)的n还有意义吗?

改成
while(i<=(int)Math.sqrt(n)){ //其实就是i从2到n的平方根的for循环
if(n%i==0){
s2+=Sum(i);
s2+=Sum(n/i);
}
i++;
}

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧