C语言编程判断输入的正整数是否为素数。
将:for(k=2;k<=x[i]-1;k++)改成:for(g=0,k=2;k<=x[i]-1;k++)主要是在这个for循环前令g=0。
因为输入的不止一个数,开头的初始化g=0,在第一个数的时候就可能已经被改了。后面的数不重新初始化g=0,就不能保证对了。
判断一个正整数n是不是素数的思路:
思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 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<stdio.h>/*scanf,printf,system*/
int isPrime(int n)//判断n是否为素数,如果是则返回1,否则返回0。
{
if(n<=1)return 0;//小于等于1直接退出。
int i;
for(i = 2; i <= (int)sqrt(n); i ++)//从2到算术平方根遍历。
if(!(n%i)) return 0;//存在约数,不是素数,返回0。
return 1;//不存在约数,返回1,表示为素数。
}
main ()
{
int num;
scanf ("%d", &num);
if ( isPrime( num) )//num是素数。
printf ("%d is a prime",num);
else
printf ("%d isn't a prime",num);//num不是素数。
system("PAUSE");//暂停界面。
return 0;
}
扩展资料:
输入一个正整数或0,判断是否为质数:
#include "stdio.h"
int main()
{
while(1)
{
int n,flag,i;
printf("请输入一个数:");
scanf("%d",&n);
flag = n/2+1;
if(n==0||n==1)
printf("%d既不是质数也不是合数\n",n);
else if(n==2)
printf("%d是质数\n",n);
else
{
for(i=2;i<=flag;i++)
{
if((n%i)==0)
{
printf("%d不是质数,是合数\n",n);
break;
}
if(i==flag&&(n%i)!=0)
printf("%d是质数\n",n);
}
}
}
}