zoukankan      html  css  js  c++  java
  • POJ2262Goldbach's Conjecture

    转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299063931

    提示:100W真是大的BT。。。。我用了优化还是勉强AC掉,认识的一位达人,16ms AC这题,Orz....

    解题思路:

     

    如果还是按常规方法求一百万内的所有素数(就是除法求模),时间复杂度是大到难以置信的。因此必须转换思路进行优化,用加法代替除法,用空间换取时间!计算算加法绝对要比除法快得多,而且一百万个地址,也就是差不多1MB的内存,相信现在99%的电脑还是可以很轻松地拿出来的!

     

    判断素数的优化:

    1、 素数除2外都是偶数,先减半

    2、 递归法:如果一个数不能被比它小的所有素数整除,那么它就是素数。

    3、 根号法:如果一个数X不能被 [2, 根号X ] 内的所有数整除,那么它就是素数

     

    组合上面三个方法,可以大大减少时间复杂度,其实第3点是最有效的省时方法,能够少做很多除法。

     1 //Memory       Time 
    2 //228K 907MS
    3 #include<iostream>
    4 using namespace std;
    5
    6 bool judge_prime(int digit)
    7 {
    8
    9 int i,flag;
    10 if(digit%2==0)
    11 return false;
    12 else
    13 {
    14 for(i=3,flag=1;i*i<=digit;i+=2)
    15 if(digit%i==0)
    16 {
    17 flag=0;
    18 break;
    19 }
    20 if(flag)
    21 return true;
    22 }
    23 return false;
    24 }
    25
    26 int main(void)
    27 {
    28 int temp,num,flag;
    29 for(;;)
    30 {
    31 cin>>num;
    32 if(num%2!=0||num<6)
    33 return 0;
    34 for(temp=3,flag=1;temp<=num/2;temp+=2)
    35 if(judge_prime(temp)&&judge_prime(num-temp))
    36 {
    37 cout<<num<<" = "<<temp<<" + "<<num-temp<<endl;
    38 flag=0;
    39 break;
    40 }
    41 if(flag)
    42 cout<<"Goldbach's conjecture is wrong."<<endl;
    43
    44 }
    45 return 0;
    46 }
    [ EXP技术分享博客 ] 版权所有,转载请注明出处: http://exp-blog.com
  • 相关阅读:
    剑指offer字符串列表
    剑指offer数组3
    剑指offer数组2
    剑指offer数组1
    剑指offer数组列表
    tensorflow+ssd_mobilenet实现目标检测的训练
    Win7+keras+tensorflow使用YOLO-v3训练自己的数据集
    Java是如何实现跨平台的
    Xshell 、PuTTY 复制文件到Linux
    Asp.Net Core2.0在linux下发布
  • 原文地址:https://www.cnblogs.com/lyy289065406/p/2120484.html
Copyright © 2011-2022 走看看