Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- public class DeletablePrimes {
- public static void main(String[] args){
- List<Integer> primes = primes(10000000);
- List<Integer> deletablePrimes = new ArrayList<Integer>();
- long sum = 0;
- for(int i : primes){
- if(isDeletablePrime(Integer.toString(i))){
- deletablePrimes.add(i);
- sum+=i;
- }
- }
- System.out.println(deletablePrimes.size());
- System.out.println(sum);
- }
- public static List<Integer> primes(int n){
- int p = 2;
- boolean[] primes_b = new boolean[n];
- Arrays.fill(primes_b, true);
- primes_b[0] = false;
- primes_b[1] = false;
- outerloop: while(p<n){
- for(int x=2; p*x<n;x++){
- primes_b[x*p] = false;
- }
- for(int i = 2; i<=primes_b.length;i++){
- //selecting next p
- try{
- if(primes_b[i]){if(i>p){p=i;break;}}
- }catch(IndexOutOfBoundsException e){
- break outerloop;
- }
- }
- }
- List<Integer> primes = new ArrayList<Integer>();
- for(int i =0;i<primes_b.length;i++){
- if(primes_b[i]){primes.add(i);};
- }
- return primes;
- }
- public static boolean isprime(int num){
- if(num < 2) return false;
- if(num == 2 || num == 3) return true;
- if(num%2 == 0 || num%3 == 0) return false;
- long sqrtN = (long)Math.sqrt(num)+1;
- for(long i = 6L; i <= sqrtN; i += 6) {
- if(num%(i-1) == 0 || num%(i+1) == 0) return false;
- }
- return true;
- }
- public static boolean isDeletablePrime(String prime){
- if(Integer.parseInt(prime.substring(0,1))==0){return false;};
- if(prime.length()==1){
- if(isprime(Integer.parseInt(prime))){
- return true;
- }else{
- return false;
- }
- }
- for(int r = 0; r<prime.length();r++){
- String buffer = prime.substring(0,r)+prime.substring(r+1,prime.length());
- if(isprime(Integer.parseInt(buffer))){
- if(isDeletablePrime(buffer)){
- return true;
- }
- }
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement