求100-200之间的素数

本文探讨了三种不同的素数判定方法,包括遍历所有可能因数、遍历至数的一半以及遍历至平方根,通过代码实现比较了它们的效率。优化后的程序尝试的数字更少,提高了运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

素数定义:一个大于1的正整数,除了1和它本身以外,不能被其他正整数整除。

解题思路:先找出100-200之内所有的整数。让这个整数对除去1和它本身的数字取余,若余数为0,则不是素数。反之为素数。

#include<stdio.h>
#include<windows.h>

int IsPrime(int x)
{
	int i = 2;
	for (; i <= x ; i++){
		if (x%i == 0){
			return 0;
		}
		else{
			return 1;
		}
	}
}
int main()
{
	int i = 100;
	for (i = 100; i <= 200; i++){
		if (IsPrime(i) == 1){
			printf("%d ", i);
		}
	}
	system("pause");
	return 0;
}

结果如下:
在这里插入图片描述
我们再想,一个数若不是素数,那它至少能整出2,我们按这个思路往下走,那是不是k++加到i/2的时候就不用再往下判断了呢?我们试着看一看:

修改部分:
int IsPrime(int x)
{
	int i = 2;
	for (; i <= x/2; i++){    //只需试到x/2
		if (x%i == 0){
			return 0;
		}
		else{
			return 1;
		}
	}
}

结果和第一次一样:
在这里插入图片描述
Ok,我们来看另一种方法。
比如说我们要判断的这个数字x=ab,且a<b;那我们一个一个试x是否能被整除时,肯定会先试到较小的数字a。那假如a=b,即x=a^2呢,这时候a=√x,li是不是表示我们检测到a,也就是√x时,就已经可以证明它是素数了呢?
例:100=10
10,要证明100不是素数,我们只用尝试1—10,到10就可以证明它不是素数了,我们试试看:

修改部分:
#include<stdio.h>
#include<windows.h>
#include<math.h>     //注意引入#include<math.h>头文件,才能完成开平方语句

int IsPrime(int x)
{
	int i = 2;
	int top = sqrt(x);       //对x开根号
	for (; i <= top ; i++){     //试到√x
		if (x%i == 0){
			return 0;
		}
		else{
			return 1;
		}
	}
}

结果当然还是一样的:
在这里插入图片描述
我们说了这三种方法,显而易见,第三种是尝试的数字最少的程序。我们知道,一个程序的好与坏不仅表现在可读性,也表现在他的效率,运行次数和所占空间大小等中,所以,我们要尽可能的优化程序,使它的效率最高,运行次数最少,所占空间最小。无论在哪方面,我相信,一个完美的程序正是我们所有人所追求的!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值