注:普通版是最简单的写法,进阶版是 “函数+数组” 的形式,并且在判断x是否是素数的方式上if(x%i==0),其中的i的量进阶版比普通版量要少,这样一定程度上能减少时间复杂度。
1.输入一个数,判断它是否为素数
1.1普通版(07.16_1)
//输入一个整数,判断它是否为素数
#include
int main(void)
{
int x;
scanf("%d",&x);
int i;
int isprime=1;
for(i=2;i
1.2进阶版(07.15_1)
//输入一个数x,判断它是否为素数
//思路:先排除0,1以及2(不含2)以上的整数
#include
#include
int isprime(int x);
int main(void)
{
int x;
scanf("%d",&x);
if(isprime(x)){
printf("%d是素数",x);
} else {
printf("%d不是素数",x);
}
return 0;
}
int isprime(int x)
{
int ret=1;
int i;
double size=sqrt(x);//小套路,再循环中尽量直接给值,不要给计算公式,这样能减少计算量
if(x==1 || (x!=2 && x%2==0)) ret=0;//0,1和2以上(不含2)的整数都不是素数。
for(i=3;i
2.输出x以内的素数
2.1普通版(07.16_3)
//输出100以内的素数
#include
int main(void)
{
int i;
for(i=1;i<100;i++) {
int k;
int isprime=1;
for(k=2;k
2.2进阶版(07.15_3)
//构造n以内(不含)的素数表
//思路:见下面伪代码。
//(1)开辟prime[n],初始化其所有元素为1,prime[x]为1表示数x是素数;
//(2)令x=2;
//(3)若果x是素数,则对于(i=2;i*x
int main(void)
{
const int n=100;
int i;
int isprime[n];
for(i=0;i
3.输出前n个素数
3.1普通版(07.16_4)
//输出前50个素数
#include
int main(void)
{
int cnt=0;
int x;
for(x=2;cnt<100;x++) {//揣摩这种for循环条件的写法
//因为cnt从0开始计数,所以不能挂等于
int i;
int isprime=1;
for(i=2;i
3.2进阶版(07.15_2)
//求出前number个素数(按大小),把他们放在数组中,然后遍历,输出
//思路:定义一个数组,从小到大判断数是否是素数,是的话就放入这个数组,
//然后通过判断是否能被 已知的 小于x的 并且已在数组中 的素数 整除,来确定这个数是否为素数
//注:数组中已经初始化了几个易得知的素数,见line 10;
//当然不初始化该数组也没问题,但是i要从2开始,因为1不是素数,从1开始没意义。
#include
int isprime(int x, int knownprimes[], int numberofknownprimes);
int main(void)
{
const int number=100;
int prime[number]={2,3};//数组中的前两个已经初始化了所以下面i从5开始
int count=2;
int i=5;//前两个素数已经初始化了
// //for test
// {//这个大括号和下面那个大括号都是用来调试时看变量输出情况的。上面这个作用是输出个表头
// int i;
// printf("\t\t");
// for(i=0;i
4.输出[m,n]区间内的素数,并求和(07.16_2)
//输出[m,n]区间内的素数,个数,并求和
#include
int main(void)
{
int m,n;
scanf("%d %d",&m,&n);
if(m==1) m=2;
int cnt=0;
int sum=0;
int i;
for(i=m;i<=n;i++) {
int isprime=1;
int k;
for(k=2;k