zoukankan      html  css  js  c++  java
  • 每日一小练——求质数

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


    题目:求质数


    内容:

    试编写一个程序,找出前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语言名题精选百则》



  • 相关阅读:
    [原创]Java开发如何在线打开Word文件
    [原创]Java开发在线打开编辑保存Word文件(支持多浏览器)
    [原创]java操作word(一)
    [原创]java对word文档的在线打开
    修改ZEN CART系统遇到的问题总结(不断更新)
    MYSQL 5.1 插入空值BUG 解决方法
    zen cart 安装 商品批量管理插件(easy_populate_v1257_utf8)出现的问题
    C# 区分无线网卡和有线网卡的MAC
    C# Flash的背景透明处理
    c#Windows服务
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5075598.html
Copyright © 2011-2022 走看看