找100~200之间的素数(C语言)

这是一道简单的C语言练习题,要做出这道题首先要知道素数的定义。

素数又称质数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。通俗来讲就是只能被1和它本身整除的数。

代码思路

先定义一个 让它从100循环到200,在这个循环中来判断 i 是否为素数。

接着用一个 j 循环从2开始到 i i%j 判断它是否等于0,如果等于0,那么就不是素数,如果遍历完后依旧没有等于0的情况,这个i就是一个素数。

但是这样还没完,我们还需要添加一个flag来判断 if语句 是否判断出i的质数情况,如果flag==0那么i就不是质数,如果flag==1(没有被改变)i就是质数。

初版代码如下:

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for(i=101;i<=200;i++)
	{
		int flag = 1;
		for (j = 2; j < i; j++)  
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

写完代码后,发现还有可以优化的地方,例如:

1.偶数不可能是一个质数,所以 i 的for循环由

for (i = 100; i <= 200; i++)

优化为

for(i = 101; i <= 200; i += 2)

2.通过观察发现 一个数的两个因子其中的一个不会大于根号本身,例如

16=4*4,16=2*8,16=1*16; √16=4,可以看出 4<=4 , 2<=4, 1<=4;

所以我们只需要比较到根号i 就可以判断出i是否为一个质数。

代码由

for (j = 2; j < i; j++)  

优化为

for (j = 2; j < sqrt(i); j++)  

当然 sqrt()是一个库函数,所以要引一个头文件 #include<math.h>

优化后的全部代码:

#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	int j = 0;
	for(i=101;i<=200;i+=2)
	{
		int flag = 1;
		for (j = 2; j < sqrt(i); j++)  
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

调试结果

希望可以帮到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值