C语言求素数技巧:优化for循环结构,正确添加括号
c语言关于用for循环求素数
要在第二个for中添加括号,请按如下所示添加:
if(i%j!=0)printf("%d\t",i);}printf("\n");}
C语言编程判断输入的正整数是否为素数。
替换:for(k=2;k<=x[i]-1;k++)为:for(g=0,k=2;k<=x[i]-1;k++)主要令g=0在for循环之前。
由于输入了多个数字,当输入第一个数字时,初始初始化g=0可能已经改变。
如果后面的数字不是在g=0处重新开始,则不能保证它们是正确的。
判断正整数n是否为素数的思路:
思路1):因此,判断整数m是否为素数,只需要除以m即可2~m-1之间如果m不能被所有整数整除,则m是质数。
想法2):此外,决策方法可以简化。
m不需要除以2~m-1之间的每个整数,只需除以2~√m之间的每个整数即可。
如果m不能被2到√m之间的任何整数整除,则m必须是素数。
例如,要确定17是否是质数,只需将17除以2到4之间的每个整数即可。
由于它们不可整除,因此可以确定17是素数。
原因:因为如果m能被2到m-1之间的任意整数整除,那么它的两个因数之一必须小于或等于√m,另一个必须大于或等于√m。
例如,16可以被2、4和8整除,16=2*8,2小于4,8大于4,16=4*4,4=√16。
,因此只需在2~4之间确定,不考虑任何因素。
正确的代码如下:
#include<math.h>/*sqrt*/
#include
intisPrime(intn)//判断n是否为素数如果是,则返回1,否则返回0。
{
if(n<=1)return0;//如果小于等于1则直接退出。
inti;
for(i=2;i<=(int)sqrt(n);i++)//去2的算术平方根。
if(!(n%i))return0;//如果有除数且不是素数,则返回0。
return1;//如果没有除数,则返回1,表示为素数。
}
main()
{
intnum;
scanf("%d",&num);
if(isPrime(num))//num是质数。
printf("%disaprime",num);
否则
printf("%disn'taprime",num);//数一不是素数。
System('stop');//停止界面。
return0;
}
扩展信息:
判断是否为正整数或回车是否0是质数:
#include"stdio.h"
intmain()
{
while(1)
{
intn,flag,i;
printf("请输入一个数字:");
scanf("%d",&n);
flag=n/2+1;
if(n==0||n==1)
printf("%d既不是质数也不是合数\n",n);
elseif(n==2)
printf("%d是质数\n",n);
否则
{
for(i=2;i<=flag;i++)
{
if((n%i)==0)
printf("%d不是素数,它是合数\n",n);
break;
}
if(i==flag&&(n%i)!=0)
if(i==flag&&(n%i)!=0)
printf("%d是质数\n",n);
}
}
}
}