谢谢大家,我终于明白了~另外充一句:如果循环里没遇到可整除的数,循环结果他的结果已是i=n+1,即i>n,执行printf("%d为素数",m);

谢谢大家,我终于明白了~另外充一句:如果循环里没遇到可整除的数,循环结果他的结果已是i=n+1,即i>n,执行printf("%d为素数",m);
大家好,我是C语言初学者,我现在遇到点总题想请教下大家, 例:判断输入数是否为素数。 # include "stdio.h" void main() {int m,n,i; scanf("%d\n",&m); n=sqrt(m); for(i=2;i<=n;i++) if(m%i==0) break; if(i>k) printf("%d为素数",m); else printf("%d为合数",m);} 我想请问的是标注为红色字区域中,“为什么要i>k,才为素数”,例如我输入m=18,则K=4,循环中i=2时能整除,跳出循环,执行i>k条件下m为素数,但9比4大,说明18也不是素数呀,所以我有些想不通,请大家帮帮忙!谢谢!
那把printf放在循环里面不就好了
if (m%i==0)
printf('合数\n");
else printf("素数\n");
[此贴子已经被作者于2004-07-28 16:55:32编辑过]
我认为。。这各程序可以先排偶。。即只有半数的循环。。如果。要细还可以排3数。。就可以减少很多循环。。程序好点。。个人意见。。。
p是素数的==>a^p=a mod p;a为任意数..
p是素数<==> (p-1)!= -1 mod p
可以写一个函数来检验:
prime(a) int a; { int i; for(i=2; i<(int)sqrt(a)+1; i++) if(!(a % i)) return 0; return 1; }
返回0不是素数,返回1是素数