如何编写一个C语言程序判断一个数是否是素数

如何编写一个C语言程序判断一个数是否是素数,第1张

思路1:

判断一个整数m是否是素数,只需把m被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。代码如下:

#include <stdioh>

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:

另外判断方法还可以简化。m不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ 之间的每一个整数去除就可以了。如果m不能被 2 ~ 间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。代码如下:

#include <stdioh>

#include <mathh>

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;

}

以下是求100以内素数的代码:

i = 2;

while(i < 100):

j = 2;

while (j <= (i/j)):

if not (i%j):break

j = j +1

if(j > i /j):print (i," 是素数")

i = i+1

C语言-寻找素数

附代码:

#include<stdioh>

#include<mathh>

int main()//原理:设ab=c,a<b,则有a<根号c<b。若设a恒小于根号c,则只需判断a是否为因数

{

int a, b;

printf("请按从小到大输入两个素数:");

scanf_s("%d %d", &a, &b);

int n = 0,m=0,sum = 0;

double i, j;//i是从a到b的待筛选数,j是从2到根号i的除数,要判断j是否为i的因数

for (i = a; i <= b; i++)

{

m = 0;

int c = int(pow(i, 05));

for (j = 2; j <= c; j++)

{

if ((i / j - int(i / j)) == 00)

{

m++;//m是i被从2到根号i的j除了之后,商为整数,即发现j是i的因数的次数

}

}

if (m==0)

{

printf("找到素数:%d\n", int(i));

n++;

sum = sum + i;

}

}

printf("大于等于%d,小于等于%d的素数的个数为:%d\n", a, b, n);

printf("它们的和为:%d", sum);

return 0;

}

#include&lt;iostream&gt;

#include"mathh"

using namespace std;

bool isPrimeNumber(int number){//判断是否为素数

float sqrtOfNum=sqrt(number);

for(int j=2;j&lt;=sqrtOfNum;j++)//从2到number的算术平方根迭代

if(number/jj==number)//判断j是否为number的因数

return false;

return true;

}

void printNum(int number){//打印出&lt;=number的所有质数

int j=0;

for(int i=2;i&lt;=number;i++)

if(isPrimeNumber(i)==true){

cout&lt;&lt;("%-5d",i)&lt;&lt;"";

j++;

if(j%10==0)//每隔十个数字换行

cout&lt;&lt;endl;

}

}

int main(){

long start=time(NULL);

cout&lt;&lt;(bool)isPrimeNumber(29)&lt;&lt;endl;

printNum(1000);

long end=time(NULL);

cout&lt;&lt;endl&lt;&lt;"Time spent:"&lt;&lt;(end-start+1)&lt;&lt;endl;

}

扩展资料:

C++100以内的素数代码:

#include&lt;iostream&gt;

#include&lt;mathh&gt;

using namespace std;

const int N=300;

bool prime[N];//布尔数组变量0、1

void primeNum(int a);

void printPrimeNum();

//主函数

int main()

{

primeNum(N);

printPrimeNum();

return 0;

}

//得到N以内的素数

void primeNum(int a)

{

int i,j,n=0;

for(i=2;i&lt;a;i++)//第一轮筛选去掉2的倍数

{

if(i%2)prime&lt;i&gt;=true;

else prime&lt;i&gt;=false;

}

for(i=3;i&lt;=sqrt((double)a);i++)//double(N)是将N强制转换为双精度整型,求平方根i=3,5,7,9

{

if(prime&lt;i&gt;)

for(j=2i;j&lt;N;j+=i)prime[j]=false;//第二轮筛选相当于j=ni,去掉3,5,7的倍数

}//经过两轮筛选相当于去掉了2,3,5,7的倍数

}

//打印N以内的素数

void printPrimeNum()

{

int i,n=0,primeList[N];

for(i=2;i&lt;N;i++)

if((i==2)||(prime&lt;i&gt;))primeList[n]=i,n++;

cout&lt;&lt;N&lt;&lt;"以内的素数个数为:"&lt;&lt;n&lt;&lt;endl&lt;&lt;"它们分别是:"&lt;&lt;endl;

for(i=0;i&lt;n;i++)cout&lt;&lt;primeList&lt;i&gt;&lt;&lt;"";

}

方法一:

#include<stdio.h>

int main(){

int i,j;

printf("请输入一个正整数。\n");

scanf("%d",&i);

if(i<2)

printf("小于2,请重新输入。\n");

elseif(i%2==0)

printf("%d不是一个素数。\n",i);

else{

for(j=2;j<=i/2;j++){

if(i%j==0){

printf("%d不是一个素数。\n",i);

break;

if(j>i/2){

printf("%d是一个素数。\n",i);

break;

方法二:

#include<stdio.h>

int main(){

int a=0;

int num=0;

scanf("%d",&num);

for(inti=2;i<num-1;i++){

if(num%i==0){

a++;

if(a==0){

printf("YES\n");

}else{

printf("NO\n");

方法三:

#include"stdio.h"

int main(){

printf("\t\t\t\t\thelloworld\n");

int a,i;

do{

printf("inputnumberjudgeprimenumber:\n");

scanf("%d",&a);

for(i=2;i<a;i++)

if(a%i==0)break;

if(i==a)

printf("%d是素数\n",a);

else

printf("%d不是素数\n",a);

}while(a!=0);

以下是C++代码:

Copy code

#include <iostream>

using namespace std;

bool isPrime(int num){

if(num < 2){

return false;

}

for(int i=2; ii<=num; i++){

if(num % i == 0){

return false;

}

}

return true;

}

int main(){

int n;

cout << "请输入正整数n:";

cin >> n;

if(isPrime(n)){

cout << "yes" << endl;

}else{

cout << "no" << endl;

}

return 0;

}

程序首先定义了一个函数 isPrime,用于判断一个整数是否为素数。isPrime 接收一个整数 num 作为参数,如果 num 不大于 1,则返回 false,如果 num 能被任何比 1 大但小于等于 sqrt(num) 的整数整除,则返回 false,否则返回 true。其中,双重循环用于遍历 num 向下取整后的所有整数。

接着,程序读入一个正整数 n 。如果 n 是素数,则输出 "yes",否则输出 "no"。

需要注意的是,本程序中使用了布尔值来表示判断结果,如果需要对素数进行一

c语言判断素数的函数程序:

经分析,以上代码使用flag的值来判断输入的n是否为素数,flag=1,n为素数;flag=0,n不是素数。完善if条件语句,第一个if,主函数中的if调用函数,需要填入一个参数,即prime(n);第二个if,是判断什么情况下flag=0,即输入的整数不为素数,即(n/i==0),余数为0,可以整除;最后返回flag的值,returnflag

但是经过运行可以知道,n=4的时候,程序判断4是素数,明显是错误的,n取0和1的时候同理,程序存在漏洞。分析得知,在定义函数的过程中,for循环条件语句,i=0,如果为负整数,另加判断条件,略)

以上就是关于如何编写一个C语言程序判断一个数是否是素数全部的内容,包括:如何编写一个C语言程序判断一个数是否是素数、python判断素数的程序、求判断素数的C语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9821148.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存