素数的判断和输出

题目的描述

判断和输出一定范围内所有的素数。
下面拿100~200来举例子

题目的分析

1.首先我们需要100~200的数字,就可以考虑使用循环打印出这些数字。
2.假设要判断一个数a是否为素数,需要拿2~a-1之间的数字去试除a,我们要产生这些数字,也可以用循环
3.如果2~a-1之间有数字能够整除a,则a不是素数;反之,a是素数。

题目的解法

1.最普通的解法

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int a = 0, i = 0;
	for (a = 100; a <= 200; a++)
	{
		int flag = 1;//首先假设a是素数
		for (i = 2; i <= a - 1; i++)
		{
			if (a % i == 0)
			{
				flag = 0;//a不是素数
				break;//有一个后就不用再继续了
			}
				
		}
		if (flag == 1)
			printf("%d ", a);
	}
	return 0;
}

这个里面多用了一个变量flag来帮忙记住,a是不是素数。
从而达到判断素数的目的,方便了我们的输出。

2.稍微优化的解法

由素数的性质我们可以知道,偶数一定不是素数。
所以我们可以对第一个循环进行修改。

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main()
{
	int a = 0, i = 0;
	for (a = 101; a <= 200; a+=2)//分析可得素数在奇数中产生
	{
		int flag = 1;//首先假设a是素数
		for (i = 2; i <= a - 1; i++)
		{
			if (a % i == 0)
			{
				flag = 0;//a不是素数
				break;//有一个后就不用再继续了
			}

		}
		if (flag == 1)
			printf("%d ", a);
	}
	return 0;
}

这样计算量就减少了一半,对第一个代码进行简单的优化。

3.使用函数的解法

我们随便选一个不是素数的数字进行分析。

eg: 16 = 2 * 8
=4 * 4
=a * b

我们可以得到在a和b中一定有一个数字是<=√n 的,那么我们就可以使用sqrt( )函数来进行开平方根的操作。

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <math.h>
int main()
{
	int a = 0, i = 0;
	for (a = 101; a <= 200; a += 2)
	{
		int flag = 1;//首先假设a是素数
		for (i = 2; i <= sqrt(a); i++)
		{
			if (a % i == 0)
			{
				flag = 0;//a不是素数
				break;//有一个后就不用再继续了
			}

		}
		if (flag == 1)
			printf("%d ", a);
	}
	return 0;
}

这样就再次优化了代码。
减少了计算量。

以上就是这篇博客的全部内容,如果有错误望各位在评论区指出。
假如有帮助到你的话,请动动小手点个赞吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值