如果孤独感 发表于 2020-4-8 15:14:59

看不懂

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

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

#include <stdio.h>
void main()
{
      unsigned long long int n,i;
      printf("\nplease input a number:\n");
      scanf("%llu",&n);
      printf("%llu=",n);
      for(i=2;i<=n;i++)/*从小数除起可以确保该数为质数所以不必判断是否为质数*/
                while(n!=i)/*如果除数不等于被除数就判断能否整除*/
                {
                        if(n%i==0)/*如果可以整除就将除数输出并被除数 = 商*/
                        {
                              printf("%llu*",i);
                              n=n/i;
                        }
                        else
                              break;/*如果除数等于被除数说明已经是最后一个质因数结束循环将其输出*/
                }
                printf("%llu",n);
}
论坛翻到的那个for后面的注释什么鬼;
看不太懂

qiuyouzhi 发表于 2020-4-8 15:16:12

就是节省两次循环的CPU时间。
0,1都不是质数,就直接跳过。

如果孤独感 发表于 2020-4-8 15:34:36

qiuyouzhi 发表于 2020-4-8 15:16
就是节省两次循环的CPU时间。
0,1都不是质数,就直接跳过。

我想问的是为什么不用排队是不是质数

qiuyouzhi 发表于 2020-4-8 15:38:57

如果孤独感 发表于 2020-4-8 15:34
我想问的是为什么不用排队是不是质数

判断语句都在循环体里啊

如果孤独感 发表于 2020-4-8 15:52:44

qiuyouzhi 发表于 2020-4-8 15:38
判断语句都在循环体里啊

哦,原来这么简单……

sunrise085 发表于 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++,……

如果孤独感 发表于 2020-4-8 16:58:40

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

………………
原来这才是正解…………………………
我********

如果孤独感 发表于 2020-4-8 17:01:57

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

另外问一句合数和整数有区别么

sunrise085 发表于 2020-4-8 17:09:52

如果孤独感 发表于 2020-4-8 17:01
另外问一句合数和整数有区别么

这是个数学问题,你不应该在编程论坛问的。
正整数分为:1,质数,合数
约数只有1和其本身的正整数为质数,又称素数
除了1和其本身之外,还有其他约数的质数,成为合数。

如果孤独感 发表于 2020-4-8 21:12:16

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

谢了
页: [1]
查看完整版本: 看不懂