求素数/质数(采用的sqrt)
#include <stdio.h>
#include<math.h>
//判断一个数是不是素数
int checkPrimeNumber(int a)
{
int i,k;//循环、平方根、
int flag = 0;//标志
// 求平方根,注意sqrt()的参数为 double 类型,
//这里要强制转换a的类型、还要注意这里的头文件哈
k = (int)sqrt((double )a);
for(i=2;i<=k;i++)
{
if (a%i==0)//余数为0,不是素数
{
flag=0;
break;
}
}
if(i>k)//循环结束时i++,不满足i<=k,所以i>k
{
flag=1;//是素数
}
return flag;
}
一个输出函数
void output(int a,int flag)
{
if(flag==1)
printf("%d是素数\n",a);
else if(flag==0)
printf("%d不是素数\n",a);
else
printf("标志错误\n");
}
主函数(我这里写的有点复杂,因为在押题,不知道以什么方式出题哈哈,挑重点看就行)
int main()
{
int a;
char ch;//检测回车
printf("输入正整数(空格隔开,回车停止): ");
do{
scanf("%d",&a);
output(a,checkPrimeNumber(a));
}while((ch=getchar())!='\n');//ch不等于换行符,为真执行循环
return 0;
}
我做do {}while()是为了可以输入多个数,一起判断;就判断一个数的话自行省略
运行:
求两个数之间所有的素数/质数(采用的sqrt)
?这我就直接贴代码啦
#include <stdio.h>
#include<math.h>
#define N 100
//判断一个数是不是素数
int checkPrimeNumber(int a)
{
int i,k;
int flag = 0;
k = (int)sqrt((double )a);
for(i=2;i<=k;i++)
{
if (a%i==0)//余数为0,不是素数
{
flag=0;
break;
}
}
if(i>k)
{
flag=1;
}
return flag;
}
//判断两个数之间的素数
void doubleKey()
{
int n1,n2,i;
int k=0;
int flag;
static int a[N];
printf("输入两个正整数(空格隔开):");
scanf("%d %d", &n1, &n2);
if(n1>n2){
k=n1;n1=n2;n2=k;
}
printf("%d 和 %d 间的素数为: ", n1, n2);
k=0;
for(i=n1+1;i<n2;i++)
{
flag=checkPrimeNumber(i);
if(flag==1)
{
a[k]=i;
k++;
}
}
for(i=0;i<k;i++)
printf("%d ",a[i]);
}
int main()
{
doubleKey();
return 0;
}
运行结果:
代码已经写的很啰嗦了,再说多了就烦了哈哈 88?
?
|