鱼C论坛

 找回密码
 立即注册
查看: 626|回复: 9

[已解决]看不懂

[复制链接]
发表于 2020-4-8 15:14:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:13195 的质数因子有 5, 7, 13 和 29。

600851475143 的最大质数因子是多少?

  1. #include <stdio.h>
  2. void main()
  3. {
  4.         unsigned long long int n,i;
  5.         printf("\nplease input a number:\n");
  6.         scanf("%llu",&n);
  7.         printf("%llu=",n);
  8.         for(i=2;i<=n;i++)/*从小数除起可以确保该数为质数所以不必判断是否为质数*/
  9.                 while(n!=i)/*如果除数不等于被除数就判断能否整除*/
  10.                 {
  11.                         if(n%i==0)/*如果可以整除就将除数输出并被除数 = 商*/
  12.                         {
  13.                                 printf("%llu*",i);
  14.                                 n=n/i;
  15.                         }
  16.                         else
  17.                                 break;/*如果除数等于被除数说明已经是最后一个质因数结束循环将其输出*/
  18.                 }
  19.                 printf("%llu",n);
  20. }
复制代码

论坛翻到的那个for后面的注释什么鬼;
看不太懂
最佳答案
2020-4-8 15:54:15
因为所有的 合数都是多个质数的乘积。
从最小的数 2 开始除,一旦不能被2整除,那肯定不能被2的倍数整除,其他质数也是如此。

例如:输入n=180,最开始连续除2,当不能被2整除时,n=45,
然后i++,i=3,连续除3,当不能被3整除时,n=5,
然后i++,i=4,此时早就连续除2了,肯定不能被4整除,直接就过去了
然后i++,……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-8 15:16:12 | 显示全部楼层
就是节省两次循环的CPU时间。
0,1都不是质数,就直接跳过。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 15:34:36 | 显示全部楼层
qiuyouzhi 发表于 2020-4-8 15:16
就是节省两次循环的CPU时间。
0,1都不是质数,就直接跳过。

我想问的是为什么不用排队是不是质数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 15:38:57 | 显示全部楼层
如果孤独感 发表于 2020-4-8 15:34
我想问的是为什么不用排队是不是质数

判断语句都在循环体里啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 15:52:44 | 显示全部楼层
qiuyouzhi 发表于 2020-4-8 15:38
判断语句都在循环体里啊

哦,原来这么简单……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 15:54:15 | 显示全部楼层    本楼为最佳答案   
因为所有的 合数都是多个质数的乘积。
从最小的数 2 开始除,一旦不能被2整除,那肯定不能被2的倍数整除,其他质数也是如此。

例如:输入n=180,最开始连续除2,当不能被2整除时,n=45,
然后i++,i=3,连续除3,当不能被3整除时,n=5,
然后i++,i=4,此时早就连续除2了,肯定不能被4整除,直接就过去了
然后i++,……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 16:58:40 | 显示全部楼层
sunrise085 发表于 2020-4-8 15:54
因为所有的 合数都是多个质数的乘积。
从最小的数 2 开始除,一旦不能被2整除,那肯定不能被2的倍数整除, ...

………………
原来这才是正解…………………………
我********
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 17:01:57 | 显示全部楼层
sunrise085 发表于 2020-4-8 15:54
因为所有的 合数都是多个质数的乘积。
从最小的数 2 开始除,一旦不能被2整除,那肯定不能被2的倍数整除, ...

另外问一句合数和整数有区别么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 17:09:52 | 显示全部楼层
如果孤独感 发表于 2020-4-8 17:01
另外问一句合数和整数有区别么

这是个数学问题,你不应该在编程论坛问的。
正整数分为:1,质数,合数
约数只有1和其本身的正整数为质数,又称素数
除了1和其本身之外,还有其他约数的质数,成为合数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 21:12:16 | 显示全部楼层
sunrise085 发表于 2020-4-8 17:09
这是个数学问题,你不应该在编程论坛问的。
正整数分为:1,质数,合数
约数只有1和其本身的正整数为质 ...

谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 06:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表