看不懂
题目: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后面的注释什么鬼;
看不太懂 就是节省两次循环的CPU时间。
0,1都不是质数,就直接跳过。 qiuyouzhi 发表于 2020-4-8 15:16
就是节省两次循环的CPU时间。
0,1都不是质数,就直接跳过。
我想问的是为什么不用排队是不是质数 如果孤独感 发表于 2020-4-8 15:34
我想问的是为什么不用排队是不是质数
判断语句都在循环体里啊 qiuyouzhi 发表于 2020-4-8 15:38
判断语句都在循环体里啊
哦,原来这么简单…… 因为所有的 合数都是多个质数的乘积。
从最小的数 2 开始除,一旦不能被2整除,那肯定不能被2的倍数整除,其他质数也是如此。
例如:输入n=180,最开始连续除2,当不能被2整除时,n=45,
然后i++,i=3,连续除3,当不能被3整除时,n=5,
然后i++,i=4,此时早就连续除2了,肯定不能被4整除,直接就过去了
然后i++,…… sunrise085 发表于 2020-4-8 15:54
因为所有的 合数都是多个质数的乘积。
从最小的数 2 开始除,一旦不能被2整除,那肯定不能被2的倍数整除, ...
………………
原来这才是正解…………………………
我******** sunrise085 发表于 2020-4-8 15:54
因为所有的 合数都是多个质数的乘积。
从最小的数 2 开始除,一旦不能被2整除,那肯定不能被2的倍数整除, ...
另外问一句合数和整数有区别么 如果孤独感 发表于 2020-4-8 17:01
另外问一句合数和整数有区别么
这是个数学问题,你不应该在编程论坛问的。
正整数分为:1,质数,合数
约数只有1和其本身的正整数为质数,又称素数
除了1和其本身之外,还有其他约数的质数,成为合数。
sunrise085 发表于 2020-4-8 17:09
这是个数学问题,你不应该在编程论坛问的。
正整数分为:1,质数,合数
约数只有1和其本身的正整数为质 ...
谢了
页:
[1]