码迷,mamicode.com
首页 > 其他好文 > 详细

每日一小练——求质数

时间:2015-12-25 13:33:41      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

上得厅堂,下得厨房。写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练。


题目:求质数


内容:

试编写一个程序,找出前N个质数。假设没有进一步要求,这不是难题。

但在此希望从所知的、使用除法的方法中,用最快的办法来编敲代码。


我的解法:上来没多想,打开vs2013就敲了起来。问题果然非常easy,分分钟就超神。

奥。不正确就攻克了!

这个题目确实非常easy,先看看常规解法吧!

#include <iostream>
#include <math.h>
#define endNum 200
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	bool isPrime(int x);
	cout << endNum << "以内的之所以素数为:" << endl;
	for (int i = 2; i < endNum; i++)
	{
		if (isPrime(i))
			cout << i << "  ";
	}
	getchar();
	return 0;
}

bool isPrime(int x)
{
	int endP = sqrt(x);
	bool rusult = true;
	for (int i = 2; i <= endP; i++)
	{
		if ((x % i) == 0)
		{
			rusult = false;
		}
	}
	return rusult;
}

实验结果是

技术分享


只是题目中要求了思索除法范围内最快的算法。事实上就是在循环中,降低以至不为质数的值的除法运算。比方2的倍数,3的倍数。和5的倍数。这样循环的递增就不是依照+1递增了,而已2,4,2,4....循环加法递增,这样能够降低循环三分之二的工作量。

改价算法例如以下

#include <iostream>
#include <math.h>
#define endNum 200
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	bool isPrime(int x);
	int addNum = 2;
	cout << endNum << "以内的之所以素数为(改进算法):" << endl;
	cout << "2  3  5  ";
	for (int i = 7; i < endNum; )
	{
		if (isPrime(i))
			cout << i << "  ";
		addNum = 6 - addNum;
		i += addNum;
	}
	getchar();
	return 0;
}

bool isPrime(int x)
{
	int endP = sqrt(x);
	bool rusult = true;
	for (int i = 2; i <= endP; i++)
	{
		if ((x % i) == 0)
		{
			rusult = false;
		}
	}
	return rusult;
}

实验结果:

技术分享


最后要感谢Clover_tjp同学提出的建议。我会在以后的每日一下练中加以改进,欢迎大家提出自己的意见哈!


欢迎大家增加每日一小练,嘿嘿!

每天练一练。日久见功夫,加油。


            -End-

參考文献:《c语言名题精选百则》



每日一小练——求质数

标签:

原文地址:http://www.cnblogs.com/gcczhongduan/p/5075598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!