当前位置:首页 » 编程语言 » 初等c语言判断素数个数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

初等c语言判断素数个数

发布时间: 2023-08-18 05:52:02

c语言判断素数

根据初等数论,一个整数不能整除他的平方数之内的整数就是素数..
#include<stdio.h>
#include<math.h>
main(){
int
n,j,sum=0;
for(n=3;n<=300000;n+=2){
for(j=2;j<=sqrt(n)-1;j++){
if((n%j)==0)
break;
}
if(j>sqrt(n)-1){
printf("%d,
",n);
sum=sum+1;
}
}
printf("\
sum=%d\
",sum);
}
这个程序是找出3到300000内的所有素数...也可以根据你的范围修改程序上面程序中300000的值!值的一提的是这个程序运行的时间5秒左右,因为利用了初等数论和筛选法......直接把偶数(大于3)去掉不做判断..如果用穷举法(举个例:300000中最大的素数为299993,运行到这个数时是将299993从2开始除一直到299992才判断结束!这就说就是这一个数就做了判断299992次判断.而300000内的素数有26121个..)程序运行时间要2分多钟!!!!我在本机上测试过..可见程序的算法是多么重要..

⑵ 怎么用c语言判断一个数是不是素数

方法一:

#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语言,判断1-100之间有多少个素数,并输出所有素数。

可以使用筛法来判断 1-100 之间有多少个素数,并输出所有素数。筛法是一种通过枚举合数的因子来筛选出素数的方法。

下面是用 C 语言实现的代码示例:

#include <stdio.h>
#include <stdbool.h>

#define N 100

int main(void)
{

// 创建一个 bool 类型的数组,用来存储每个数是否为素数
bool prime[N + 1];


// 初始化数组,假设所有数都是素数
for (int i = 0; i <= N; i++)
prime[i] = true;

// 使用筛法筛选出素数
for (int i = 2; i <= N; i++)
{
// 如果 i 不是素数,则跳过
if (!prime[i])
continue;

// 输出 i
printf("%d ", i);

// 将 i 的倍数标记为合数
for (int j = i * i; j <= N; j += i)
prime[j] = false;
}

return 0;

}


运行结果如下:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

在这个程序中,使用了一个 bool 类型的数组来存储每个数是否为素数。使用筛法筛选出 1-100 之间的素数,并输出每个素数。

需要注意的是,C 语言没有内置的 bool 类型,需要使用头文件 stdbool.h 来支持 bool 类型。在上面的代码中,需要包含头文件 stdio.h 和 stdbool.h。

⑷ 求判断素数的C语言程序

C语言-寻找素数

附代码:
#include<stdio.h>
#include<math.h>
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, 0.5));
for (j = 2; j <= c; j++)
{
if ((i / j - int(i / j)) == 0.0)
{
m++;//m是i被从2到根号i的j除了之后,商为整数,即发现j是i的因数的次数
}
}
if (m==0)
{
printf("找到素数:%d ", int(i));
n++;
sum = sum + i;
}
}
printf("大于等于%d,小于等于%d的素数的个数为:%d ", a, b, n);
printf("它们的和为:%d", sum);
return 0;
}

⑸ 用C语言如何判断素数

素数又称质数,所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。

思路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之间有无因子即可。


两种思路的代码请看解析。

拓展资料:

素数(prime number)又称质数,有无限个。素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

网络——C语言

⑹ C语言编写一个程序判断一个数是否为素数急求

目的:判断一个数是否为素数

#include<stdio.h>


intmain(void)


{


int m;


inti;


scanf("%d",&m);


for(i=2;i< m;i++) //2到(m-1)的数去除m


{


if(m%i==0)//判断能否整除


break;

}

if(i== m)


printf("YES! ");


else


printf("No! ");


}

for循环的功能:

①若能整除,通过break跳出函数;

②若一直到m-1都不能整除,此时i再自增1到m,不满足i< m跳出for循环,这时i= m。

(6)初等c语言判断素数个数扩展阅读:


素数定理:



1、在一个大于1的数a和它的2倍之间(即区间(a,2a]中)必存在至少一个素数。



2、存在任意长度的素数等差数列。



3、一个偶数可以写成两个合数之和,其中每一个合数都最多只有9个质因数。(挪威数学家布朗,1920年)。



4、一个偶数必定可以写成一个质数加上一个合成数,其中合数的因子个数有上界。(瑞尼,1948年)。



5、一个偶数必定可以写成一个质数加上一个最多由5个因子所组成的合成数。后来,有人简称这结果为(1+5)(中国潘承洞,1968年)。



6、一个充分大偶数必定可以写成一个素数加上一个最多由2个质因子所组成的合成数。简称为(1+2)。