C语言打印出0~n之间的所有素数的代码及其优化代码和思想

打印0~n之间的素数

代码如下所示:

#include<stdio.h>
void Isprime(int n)
{
	int i,j;
	for (i = 2; i <= n; i++)//产生了2~n个的数字,因为1不
	{
		for (j = 2; j <= i; j++)//若i是素数,在2~(i-1)中i对任何数取余都不等于0
		{
			if (i%j == 0)
			{
				break;//表示i不是素数就没必要在往下取余了,直接跳出该循环,i++,进行下一个数的判断就好了
			}
		}
		if (j>=i)
		{
			printf("%d\t", i);
		}
	}
}
int main()
{
	int a = 0;
	printf("请输入你要打印到多少的素数:");
	scanf("%d", &a);
	Isprime(a);
	printf("\n");
	return 0;
}

例如答应0~300之间的素数结果如下图所示:
在这里插入图片描述
打印素数的优化代码1:
优化思想:例如 :9=1x9或者9=3x3;
8=2x4或者8=1x8…
n=axb;会发现其中有个因数a或者b一定是小于或者等于n/2的
所以优化代码如下:

#include<stdio.h>
void Isprime(int n)
{
	int i,j;
	for (i = 2; i <= n; i++)//产生了2~n个的数字
	{
		for (j = 2; j <= i/2; j++)//若i是素数,在2~(i/2)中i对任何数取余都不等于0
		{
			if (i%j == 0)
			{
				break;//表示i不是素数就没必要在往下取余了,直接跳出该循环,i++,进行下一个数的判断就好了
			}
		}
		if (j>i/2)
		{
			printf("%d\t", i);
		}
	}
}
int main()
{
	int a = 0;
	printf("请输入你要打印到多少的素数:");
	scanf("%d", &a);
	Isprime(a);
	printf("\n");
	return 0;
}

打印素数的优化代码2:
优化思想:例如 :9=1x9或者9=3x3;3是等于根号9的
8=2x4或者8=1x8.;2小于根号8的…
n=axb 会发现其中有个因数a或者b一定是小于或等于根号n的
注意:sqrt()函数是在<math.h>的头文件里,并且是double类型的
所以优化代码如下:

#include<stdio.h>
#include<math.h>
void Isprime(int n)
{
	int i,j;
	for (i = 2; i <= n; i++)//产生了2~n个的数字
	{
		for (j = 2; j <=sqrt((double)i); j++)//若i是素数,在2~(根号i)中i对任何数取余都不等于0
		{
			if (i%j == 0)
			{
				break;//表示i不是素数就没必要在往下取余了,直接跳出该循环,i++,进行下一个数的判断就好了
			}
		}
		if (j>=sqrt((double)i))
		{
			printf("%d\t", i);
		}
	}
}
int main()
{
	int a = 0;
	printf("请输入你要打印到多少的素数:");
	scanf("%d", &a);
	Isprime(a);
	printf("\n");
	return 0;
}

还有一种优化思想是去掉偶数项,因为偶数一定不是素数哦
自己可以试着写一写哦,加油哦

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值