关于寻找素数问题

#寻找素数
##寻找100~200之间的所有素数
###对于问题的分析
1.素数是只含两个正因数的自然数(1和素数本身),因此可以从这方面入手,即让一个数n(100~200)依次除以所有比n小且比1大的自然数(1<j<=n-1)且都不能整除。
2.要想取遍100~200之间的所有自然数,应用到循环结构,而同样的,除数j也是如此,因此可以考虑使用循环嵌套结构。
###解决方案

#include<stdio.h>
int main()

{
	int n = 100;
	for (n = 100; n <= 200; n++)
	{
		int j = 2;
		int flag = 1;//假设n是素数
		for (j = 2; j <= n - 1; j++)
		{
			if (n % j == 0)//用2~n-1之间的数字去试除n,若被整除则n不是素数
			{
				flag = 0;
				break;//只要一有一个数被整除,就不可能是素数了,终止循环
			}
		}
		if (flag == 1)
			printf("%d ", n);

	}
	return 0;
}

             
             

###优化部分
1.对于被除数n
求取素数,一个一个向上取未免太过繁琐,而素数又肯定是奇数,因此可从这方面下手,对n的表达进行改进

#include<stdio.h>
int main()
{
	int n = 101;
	for (n = 101; n <= 200; n+=2)//这里是使n变为取其中的奇数,工作量直接减少了一半
	{
		int j = 2;
		int flag = 1;
		for (j = 2; j <= n - 1; j++)
		{
			if (n % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
			printf("%d ", n);

	}
	return 0;
}

2.对于除数j
任意一个数的两个因素存在大小,其中小因数必定<=√n。例如:16可以拆分成116、28、4*4,其中小因数为1、2、4皆<=4。根据这条性质,可以对除数j进行优化。

#include<stdio.h>
#include<math.h>//引入数学函数库,方便我们表示n的0.5次幂
int main()
{
	int n = 101;
	for (n = 101; n <= 200; n+=2)
	{
		int j = 2;
		int flag = 1;
		for (j = 2; j <= pow(n,0.5);j++)
		{
			if (n % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
			printf("%d ", n);

	}
	return 0;
}

萌新启航,如有遗漏或是不当之处请指正!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值