c语言判断素数代码

用算法计算素数
一.学习素数之前,先考虑几个最基本的问题:

1.什么是素数:

2.合数是什么:

3.数字中有没有特殊的数字:

4.查找素数时素数,都运用了那些算法:

二.让我们思考一下:

1.素数:除了1和本身外无法被其他自然数整除的数,叫做素数,也称质数,如:2,3,5,7一系列

2.合数:比1大但不是素数的数称为合数,如:8,9,10一系列

3.特殊的数字:1和0既不是素数也不是合数

4.算法:  1>确定性算法   2>随机性算法  3>Eratosthenes算法

三.用算法计算素数:

1.计算1000以内的素数:

#include<stdio.h>
int is_prime(int n)//prime主要的
{
int i;//所有数字的下标
if(n<=1)//如果程序中的数值<1,就返回
{
return 0;
}
for(i=2;i*i<=n;i++)//从2开始,i*i
{
if(n%i==0)//判断n%i是否能整除
{
return 0;//整除的话,就返回
}
}
return 1;
}
int main()
{
int i,n=0,t=1;//声明i,n,t,t代表排列素数顺序
printf("1000以内的素数排列:\n");
for(i=2;i<1000;i++)//i从2开始,到1000结束
{
if(is_prime(i))                        //将上个程序带入运行
{
n++;                                    //素数按顺序增加
t++;                                     //素数列表中依次向后排序
printf("%4d",i);                    //输出整型数值,输出宽度为4,且右对齐
if(t>10)                               //如果一排素数超过十个数
{
printf("\n");                         //就换行
t=1;                                    //换行后,依次排序
}
}
}
printf("\n1000以内的素数共有%d个\n",n);//输出个数
return 0;
}

这个程序虽然算出了指定区间的所有素数但却极大的浪费了内存和时间这时我们可以换一个算法

Eratosthenes算法:(埃拉托色尼筛选法)

埃氏筛法步骤

(1)先把1删除(现今数学界1既不是 质数也不是合数)
(2)读取队列中当前最小的数2,然后把2的倍数删去
(3)读取队列中当前最小的数3,然后把3的倍数删去
(4)去掉4的倍数(不需要,因为在第一步已经被去掉了)
(5)读取队列中当前最小的数5,然后把5的倍数删去
(6) 去掉6的倍数
  (7)   读取队列中当前最小的数7,然后把7的倍数删去

(8)   ... ...   一直到不能再去除为止。

程序:

#include<stdio.h>
 
#define N 1000                     //定义一个梁宏变量 1000
int main()
{
int i,j,m=0;                    //声明i,j,m,m为素数个数
int prime[N+1];                //定义一个素数的数组                                                      
for(i=2;i<=N;i++)                //初始化数组
prime[i]=1;                         //标志为1的表示对应的数组

for(i=2;i*i<=N;i++)            //循环处理前i个
{
if(prime[i]==1)                //若是素数就进行筛选
{
for(j=2*i;j<=N;j++)            //进行判断是否是素数,这里的每一个字母千万不要输入错,
{

if(j%i==0)                    //如果j能被整除,那j就不会是素数
prime[j]=0;                         //将这个数字清除
}
}
}
for(i=2;i<N;i++)                //输出
{
if(prime[i]==1)                //如果是素数,就输出
{
printf("%4d",i);                 //输出素数
m++;                             //排序中增加一个素数
if(m%15==0)                    //一排15个数字
printf("\n");                     //换行
}
}
printf("\n共有%4d  个素数!",m);    //计算输出素数个数
return 0;
}

以上都是我看的的一些书籍和自己的总结,如果有错误或者不足请联系我或者评论,麻烦您了,害羞我的邮箱13932494523@163.com

每天进步一点点,绝对不做一个平庸的



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值