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以内的素数:
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算法:(埃拉托色尼筛选法)
埃氏筛法步骤
(6) 去掉6的倍数
程序:
#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