zoukankan      html  css  js  c++  java
  • 欧拉工程第60题:Prime pair sets

    题目链接

    五个数,任意两个数的任意链接后的数还是质数

    满足这个条件的最小五个数的和是多少?

    结果:26033

    纯暴力破解:

    package projecteuler51to60;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.TreeSet;
    
    
    
    
    class level60{    
        void solve1(){
             List<Integer> primes = new ArrayList<>();
             int Max = 10000;
             
             boolean flag=true;
             primes.add(3);
             int nextPrime = 3;
             while(primes.size()!=5){
    //              System.out.println(nextPrime);                  
    
                  nextPrime = nextPrimes(nextPrime);
                  flag=true;
                  for(int i=0;i<primes.size();i++){
                      if(concatPrime(primes.get(i),nextPrime) ==false){
                         flag = false;
                      }
                  }
                  if(nextPrime>Max && flag==true){
                      primes.add(nextPrime);
    //                  System.out.println(nextPrime);                  
                  }
                  if(nextPrime>Max){
                      System.out.println(primes.size());
                      int temp = primes.remove(primes.size()-1);
                      primes.add(temp);
                  }
             }
             int sum=0;
             for(int i=0;i<primes.size();i++){
                 sum+=primes.get(i);
                 System.out.println(primes.get(i)+" ");
             }
        }
        int nextPrimes(int a){
            for(int i = a+1;;i++)
                if(isPrime(i))
                    return i;
        }
        void solve0(){
            int Max =10000;
            boolean[] primeArray = new boolean[Max];
            
            for(int i=1;i<Max;i++)
                if(isPrime(i))
                    primeArray[i]= true;
                else primeArray[i]=false;
            for(int i=3;i<Max;i=i+2){
                int a=i;
                if(isPrime(a)){
                    for(int b=a+2;b<Max;b=b+2){
                        if(isPrime(b) &&concatPrime(a,b)){
                            for(int c=b+2;c<Max;c=c+2){
                                if(isPrime(c) && concatPrime(a,c) &&concatPrime(b,c)){
                                    for(int d=c+2;d<Max;d=d+2){
                                        if(isPrime(d)&&concatPrime(a,d) &&concatPrime(b,d) &&concatPrime(c,d)){
                                            for(int e=d+2;e<Max;e=e+2){
                                                if(isPrime(e) &&concatPrime(a,e) &&concatPrime(b,e) &&concatPrime(c,e)&&concatPrime(d,e)){
                                                    System.out.println(a+b+c+d+e);
                                                    System.out.println(a+" "+b+" "+c+" "+d+" "+e);
                                                    return;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        boolean concatPrime(int a,int b){
            String digit1=String.valueOf(b)+String.valueOf(a);
            String digit2=String.valueOf(a)+String.valueOf(b);
            if(isPrime(Integer.parseInt(digit1)) &&isPrime(Integer.parseInt(digit2)))
                return true;
            return false;
        }
    
        boolean isPrime(int num){
            if(num==2||num==3 ||num==5||num==7) return true;
            if(num<2 || num%2==00) return false;
            for(int i=3;i<=Math.sqrt(num);i++)
                if(num%i==0)
                    return false;
            return true;
        }
    
        
    }
    public class Problem60 {
    
    
        public static void main(String[] args){
            long begin= System.currentTimeMillis();
            new level60().solve0();
            long end = System.currentTimeMillis();
            long Time = end - begin;
            System.out.println("Time:"+Time/1000+"s"+Time%1000+"ms");
        }
    
    }
  • 相关阅读:
    内置函数二
    通信的几个程序
    TCP协议和UDP协议
    异常处理
    logging模块
    网络编程一些概念
    hashlib
    序列化模块
    time,sys,os模块
    random模块
  • 原文地址:https://www.cnblogs.com/bbbblog/p/4781962.html
Copyright © 2011-2022 走看看