-
#include
#include
#define max 100
int main()
int z,c=0,i,j,k,n,a[max];
int flag;添加了判断标志。
scanf("%d",&n);
if(2<=n) 质数 2 首先被取出,因为它是唯一的偶数。
a[c++]=2;
for(i=3;i<=n;i+=2) 来确定每个奇数是否是素数,因为偶数肯定不是素数。
flag=1;在判断每个数字之前,将标志设置为 1for(j=3; j 这里实际上可以更快,但需要引入。
z=i%j;
if(z==0)
flag=0;如果可整除,flag=0 表示它不是素数。
break;
if(flag) 如果 flag=1 不变,则表示没有可整除的数字,i 是奇数。
a[c++]=i;
for(i=0;iprintf("%d ",a[i]);
printf("%d",c);
system("pause");
return 0;
-
切换到 A-1 绝对是可能的,但不需要那么多周期。
为什么选择A2? 假设一个数不是素数,那么 1 (a-1) 乘以等于 a 之间一定有两个数,这两个数有什么特点?
两者都等于 2
任何一个都等于 2 且小于 2
要么它们都小于 2
这些点不难得到,对于数字 4,它的平方的一半等于自身,所有大于 4 的数字的平方的一半都大于自身,所以如果一个数 a 不是素数,那么在 1 a 2 的中间一定有一个可以整除的数字, 如果在 1 a 2 的中间没有可以整除的数字,那么这个数字 a 一定是素数。
对于你说的 1 a-1 之间的,对于素数,循环数是相同的,而对于非素数,a-1 浪费了许多不必要的循环。
-
在键盘上输入 n 以确定 n 是否为素数。
#include
main()
if(i==n)
printf("您输入的 %d 是质数! ",n);
elseprintf("您输入的 %d 不是质数! ",n);}
-
使用 2 代替 a-1 是为了提高程序效率,只要 2 和 2 之间没有可整除性,剩下的一半就不可整除。
-
事实上,i<=sqrt(a) 就足够了,这是判断素数最经济的计算方法。 A 2 其次,A-1 是最贵的。
-
因为后半部分不需要判断,所以可以根据前半部分来判断数字。 它更简洁,还可以打开根数。
-
使用该函数确定它是否是。
使用数组来存储找到的素数。
如果你搜索它,有很多例程。
作为参考,略有变化。
就是这样。
-
我不知道,太乱了,我看不懂你的逻辑。 j = 2, j = 3 没问题; j = 4 似乎在 while 循环中,加上判断,当 j 是偶数时,它跳出 while 循环,即在 if(j % n != 0) 在底部添加相应的 else break;
-
因为在for语句中,一旦有某个数字是这个数字的因数,那么break语句就被执行了,跳出了for循环,这个时候,我肯定会<=k,也就是说,这个时候i=k+1,那么就证明for语句的所有循环都执行完了, 也就是说if语句中的语句还没有执行,也就是说,这个数在2k之间没有因数,那么,这个数字也是一个质数。
-
例如,判别素数的方法:
例如,这个数字 m=127,当我们判断它是否为素数时,我们需要使用从 i 开始的 2 到 126 的整数作为除数来计算 m i 是否可整除,如果是可整除的,则电流 i 是 m 的因数,m 不是素数,程序中的 m%i==0 就是这个判断, 但判断是除法的余数是否为 0。
从数学上讲,我们发现没有必要计算 2 到 126 作为除数,而只需要计算 2 到根 m(对于 m=127,11 即可得到判断),因此您将看到循环条件的结束变成了根 m。 就好像你已经判断出m除以4是取之不尽用之不竭的,你不能数m除以4的平方16,你肯定不会被除。 有关详细信息,请参阅数学中对此的解释。
此外,在程序中,k=sqrt(m); 应该写成 k=sqrt((double)m);
-
你确定这个程序是正确的吗? 断点的位置,括号,以及它的乱七八糟,如果 k 之前没有 bradk 跳跃,那么 k+1 之后就没有必要测试了,它一定是素数。 所以 i>k+1 if(m%i==0) 只是反复测试这句话。
但是你的程序本身应该有问题。 你错了。 没有逻辑写太乱了。
-
这是真的...... m 除以 2 和根 m 之间的数字,如果一个数字被除以,它就不是素数。 当 i 自增大于根数 m 并且没有除法时,则 m 为素数。
-
第一:我不明白n的用途。
第二:任何数都可以被 1 整除,所以 y 从 1 开始没有意义 第三:y 的上限不能小于 x ,如果 y 等于 x,那么 x 必须能被 y 整除
第四:如果 x 能被 y 整除,那么打破并让 y 自我增加是没有意义的。
#include
定义 n 50 * 可以是任何数字的阶乘,当然,计算机可以保存的下一个 * >>>More
这句话的意思是,从2到k+1之间没有能被n整除的数字,所以输出是素数,当然不能被else代替,否则一些非素数的数字也会作为素数输出。