domingo, 19 de febrero de 2012

project euler # 41

una variacion del problema 32

import java.util.Arrays;
import java.util.BitSet;
import java.util.Scanner;


public class problem41 
{
 public static void main(String[] args) 
 {


  long tiempo= System.currentTimeMillis();
  BitSet a = new BitSet(987654321);
  int i =2,j=0;
  for(i=2;(i*i)<=10000000;i=i+1)
  {
   if(!a.get(i))
   {
    for(j=i+i;j<=10000000;j=j+i)
    {
     a.set(j);
    } 
   }
  }
  for (int j2 =7654321; j2 >=1 ;j2--) 
  {
   String x=Integer.toString(j2);
   char v[]= x.toCharArray();
   Arrays.sort(v);
   if(!a.get(j2))
   {
    if(ispandigital(x, v[v.length-1]-48))
    {System.out.println(x);
    break;
    }
   }
  }
  System.out.println(System.currentTimeMillis()-tiempo);
 }
 public static boolean ispandigital(String x,int n)
 {
  boolean v[]= new boolean[n+1];
  for (int i = 0; i < x.length(); i++) 
  {
   v[x.charAt(i)-48]=true;
  }
  for (int i = 1; i < n+1; i++) 
  {
   if(!v[i])
    return false;
  }

  return true;
 }
}

No hay comentarios:

Publicar un comentario