怎么用c语言写判断素数( 二 )


4.编写一个C语言程序判断一个数是否是素数1. 思路1:
判断一个整数m是否是素数 , 只需把m被 2 ~ m-1 之间的每一个整数去除 , 如果都不能被整除 , 那么m就是一个素数 。代码如下:
#include <stdio.h>
int main(){
int a=0; // 素数的个数
int num=0; // 输入的整数
printf("输入一个整数:");
scanf("%d",&num);
for(int i=2;i<num;i++){
if(num%i==0){
a++; // 素数个数加1
}
}
if(a==0){
printf("%d是素数 。\n", num);
}else{
printf("%d不是素数 。\n", num);
}
return 0;
}
2. 思路2:
另外判断方法还可以简化 。m不必被 2 ~ m-1 之间的每一个整数去除 , 只需被 2 ~ 之间的每一个整数去除就可以了 。如果m不能被 2 ~ 间任一整数整除 , m必定是素数 。例如判别17是是否为素数 , 只需使17被2~4之间的每一个整数去除 , 由于都不能整除 , 可以判定17是素数 。代码如下:
#include <stdio.h>
#include <math.h>
void main(){
int m; // 输入的整数
int i; // 循环次数
int k; // m 的平方根
printf("输入一个整数:");
scanf("%d",&m);
// 求平方根 , 注意sqrt()的参数为 double 类型 , 这里要强制转换m的类型
k=(int)sqrt( (double)m );
for(i=2;i<=k;i++)
if(m%i==0)
break;
// 如果完成所有循环 , 那么m为素数
// 注意最后一次循环 , 会执行i++ , 此时 i=k+1 , 所以有i>k
if(i>k)
printf("%d是素数 。\n",m);
else
printf("%d不是素数 。\n",m);
return 0;
}
5.C语言判断素数按照你的程序凡是是奇数的都被判定为素数
for(i=2;i<n;i++)
{
a=n%i; //只要n是奇数 , 到最后必然a=1
}
有问题
按源程序作少许修改
#include <stdio.h>
int main()
{
int T,m;
int a=0;//定义为整型
scanf("%d",&m);
for(T=1;T<=m;T++)
{
int n,i;
scanf("%d",&n);
for(i=2;i<n;i++)
{
if(n%i==0) //如果能找到i将n整除 , 说明n不是素数 , 则让a与i相等 , 跳出循环
{
a=i;
break;
}
}
if (a==i)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
这种算法是比较浪费资源的 , 一般采用让判定数从1除到判定数的平方根取整 , 本题中只需要让1<=i<=(int)(i的平方根)就可以了 。这样可以节约很多时间
6.用C语言编写一程序判断M是否为素数#include <stdio.h>
void main
{
int n;
printf("请输入要判断的数:");
scanf("%d",&n);
for(int i=2;i<=n/2;i++)//用n对2到n/2的数一次求余 , 只要有一个余数为零就不是素数
if(n%i=0)
printf("%d不是素数\n",n);
printf(("%d是素数\n",n);
}
7.如何用c语言编写出判断一个数是否为质数的程序#include
#include
//n不能够被不大于根号n的任何素数整除 , 则n是一个素数
//以下代码计算1000以内所有素数
int main()
{
int i,j,n = 1000,sq;
for(i = 2;i {
sq = sqrt(i);
for(j = 2;j {
if(!(i % j))
break;
}
if(sq printf("%4d",i);
}
putchar('\n');
return 0;
}

怎么用c语言写判断素数

文章插图