判断一个整数是不是素数?

来源:百度知道 编辑:UC知道 时间:2024/09/21 06:37:14
#include <stdio.h>
#include<math.h>
void main()
{
int a,i,k,flag=0;
printf("请输入一个整数:");
scanf("%d",&a);
k=(int)sqrt(a);
for(i=2;i<=k;i++)
{
if(a%i==0)
flag=1;
}
if(flag=1)
printf("%d不是素数.\n",a);
else
printf("%d是素数.\n",a);
}

不知道哪出问题了就算是素数结果也是“不是素数”麻烦各位了!

#include <stdio.h>
#include<math.h>
void main()
{
int a,i,k,flag=0;
printf("请输入一个整数:");
scanf("%d",&a);
k=(int)sqrt(a);
for(i=2;i<=k;i++)
{
if(a%i==0)
{flag=1;
break;} //整除时,即余数等零时跳出循环,可以减少循环次数
}
if(flag==1) //把赋值符号=改为==
printf("%d不是素数.\n",a);
else
printf("%d是素数.\n",a);
}

你那个函数没有包括2,3.个人建议你用这个。你写那个的应该这样:
for(i=2;i<=k;i++)
{
if(a%i==0)
break;
}
if(i>k)
flag=1;
也就是遇到可以整除的情况,应该立刻跳出来,给标志赋值。下面是我自己写的,感觉还比较好,跟你的比,他执行的时候要多耗点时间而已。

int IsPrime(int n)
{
int i,flag=0;
if(n==1)
flag=0 ;
if(n==2)
flag=1;
else if(n>2)
{
for(i=2;i<n;i++)
if(n%i==0)
break;

if(i==n)
flag=1;
}
return flag;

}

if(a%i==0)
flag=1;
else flag=0;