当前位置: 代码迷 >> 综合 >> 欧拉工程第46题:Goldbach's other conjecture
  详细解决方案

欧拉工程第46题:Goldbach's other conjecture

热度:74   发布时间:2023-12-13 07:13:10.0

欧拉工程46
题名链接:https://projecteuler.net/problem=46

奇合数=质数+2*平方数

求第一个不满足这个条件的奇合数

合数:除1和本身外,可以被其他数整除的数
质数:除1和本身外,不能够被其他数整除
奇合数:奇数的合数

知道上面概念了就好求了。
Java 代码:

package projecteuler41to50;import java.util.Date;class level46{void solve0(){      int Max_Value=150000;boolean flag=false;for(int i=137;i<Max_Value;i=i+2){if(isComposite(i)){int num=i;while(getPrime(num)!=-1 && flag==false){num=getPrime(num);if((i-num)%2==0){int sqr=(int) Math.sqrt((i-num)/2);if(sqr*sqr==(i-num)/2){flag=true;}}}if(flag==true){flag=false;}else{System.out.println(i);return;}}}}boolean isComposite(int num){if(num%2==0) return true;if(num%3==0) return true;for(int i=2;i<num/2+1;++i)if(num%i==0)return true;return false;}int getPrime(int num){// 小于 num 的最大的质数for(int i=num-1;i>=2;i--){if(isPrime(i))return i;}return -1;}boolean isPrime(int num){if(num==2 || num==3 ||num==5) return true;for(int i=2;i<=Math.sqrt(num);++i)if(num%i==0)return false;return true;}
}
public class Problem46 {
    public static void main(String[] args){Date beginTime=new Date();new level46().solve0();Date endTime=new Date();long Time=endTime.getTime()-beginTime.getTime();System.out.println("Time:"+Time/1000+"s"+Time%1000+"ms");}}

结果:

5777
Time:0s33ms