运用c语言编写程序:判断素数的多种方法

文章展示了从基础的遍历法判断素数到逐步优化的过程,包括减少循环次数,利用平方根性质以及排除偶数。这些优化方法提高了在100-200范围内查找素数的效率。

素数是一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数;判断一个数是不是素数只需让2-这个数本身减一的所有数进行相除,如果没有一个数能把这个数本身整出,这个数就是素数.

设判断X;

所以我们可以运用for循环,使得i=2;i<x;i++for(i=2;i<x;i++)

来进行判断  在一个循环中x%1到x-1所有的数,没有一个等于0,这个数就是素数.

判断多个数只需在for循环外再加一个循环即可.

1.判断一个数是否为素数

#include<stdio.h>
int main()
{
	int input = 0;
	scanf("%d", &input);
	int i = 0;
	for (i = 2; i < input; i++)
	{
		if (input % i == 0)
		{
			break;
		}
	}
	if (i >= input)
	{
		printf("%d是素数",input);
	}
	else
	{
		printf("%d不是素数", input);
	}
	return 0;
}

 2.判断100-200中的素数(最简单)

#include<stdio.h>
int main()
{
	int j = 0;
	int i = 0;
	for (j = 100; j <= 200; j++)
	{

		for (i = 2; i < j; i++)
		{
			if (j % i == 0)
			{
				break;
			}
		}
		if (i >= j)
		{
			printf("%d是素数\n", j);
		}
		//else
		//{
		//	printf("%d不是素数\n", input);
		//}
	}
	return 0;
}

运行结果: 

101是素数
103是素数
107是素数
109是素数
113是素数
127是素数
131是素数
137是素数
139是素数
149是素数
151是素数
157是素数
163是素数
167是素数
173是素数
179是素数
181是素数
191是素数
193是素数
197是素数
199是素数

 3.判断100-200中的素数(改进)

例如16=2*8=4*4,假设一个数X,当X不是素数时,肯定有一个小于等于X/2的数会使得X被整出,从而判断出X不是素数,本例中  2和4都可使16被整除.

#include<stdio.h>
int main()
{
	int j = 0;
	int i = 0;
	for (j = 100; j <= 200; j++)//100的数
	{

		for (i = 2; i < j/2; i++)//判断--只需判断j/2个数即可
		{
			if (j % i == 0)
			{
				break;
			}
		}
		if (i >= j/2)
		{
			printf("%d是素数\n", j);
		}
		//else
		//{
		//	printf("%d不是素数\n", input);
		//}
	}
	return 0;

运行结果:

 101是素数
103是素数
107是素数
109是素数
113是素数
127是素数
131是素数
137是素数
139是素数
149是素数
151是素数
157是素数
163是素数
167是素数
173是素数
179是素数
181是素数
191是素数
193是素数
197是素数
199是素数

4. 判断100-200中的素数(进一步改进)

例如16=2*8=4*4,这次我们可以看,假设一个数X,当X不是素数时,肯定有一个小于等于根号下X的数会使得X被整出.

#include<stdio.h>
#include<math.h>
int main()
{
	int j = 0;
	int i = 0;
	for (j = 100; j <= 200; j++)//100的数
	{

		for (i = 2; i < sqrt(j); i++)//判断--只需判断根号下j个数即可
		{
			if (j % i == 0)
			{
				break;
			}
		}
		if (i >= sqrt(j))
		{
			printf("%d是素数\n", j);
		}
		//else
		//{
		//	printf("%d不是素数\n", input);
		//}
	}
	return 0;
}

运行结果: 

101是素数
103是素数
107是素数
109是素数
113是素数
121是素数
127是素数
131是素数
137是素数
139是素数
149是素数
151是素数
157是素数
163是素数
167是素数
169是素数
173是素数
179是素数
181是素数
191是素数
193是素数
197是素数
199是素数

5.判断100-200中的素数(进一步改进) 

可知素数一定不会是偶数,对此我们可以把100-200中的偶数去除.

#include<stdio.h>
#include<math.h>
int main()
{
	int j = 0;
	int i = 0;
	for (j = 101; j <= 200; j+=2)//去除掉偶数
	{

		for (i = 2; i < sqrt(j); i++)//判断--只需判断根号下j个数即可
		{
			if (j % i == 0)
			{
				break;
			}
		}
		if (i >= sqrt(j))
		{
			printf("%d是素数\n", j);
		}
		//else
		//{
		//	printf("%d不是素数\n", input);
		//}
	}
	return 0;
}

输出结果:

 101是素数
103是素数
107是素数
109是素数
113是素数
121是素数
127是素数
131是素数
137是素数
139是素数
149是素数
151是素数
157是素数
163是素数
167是素数
169是素数
173是素数
179是素数
181是素数
191是素数
193是素数
197是素数
199是素数

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值