如果一个数字将1到n的每个数字都使用且只使用了一次,我们将其称其为一个n位的pandigital数。例如,2143是一个4位的pandigital数,并且是一个质数。
最大的n位pandigital质数是多少?
import java.util.Arrays;
public class Problem41
{
public static void main(String[] args)
{
long start = System.currentTimeMillis();
System.out.print("answer: ");
howmany();
long end = System.currentTimeMillis();
System.out.print("time: ");
System.out.println(end - start);
}
static void howmany()
{
// 如果 n == 8; 1+2+....+8 = 36 一定被3 整除, n == 9 也是
// 所以 n <= 7;
for (int i = 9999999; i >= 0; i--)
{
if (ispandi(i))//先判断pandigital在判断质数更快
{
if (iszhishu(i))
{
System.out.println(i);
break;
}
}
}
}
static boolean iszhishu(int n)
{
for (int i = 2; i <= Math.sqrt(n); i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
static boolean ispandi(int n)
{
int len = (n + "").length();
int array[] = new int[len];
int index = 0;
while (n != 0)
{
array[index++] = n % 10;
n /= 10;
}
Arrays.sort(array);
for (int i = 0; i < array.length; i++)
{
if (array[i] != i + 1)
{
return false;
}
}
return true;
}
}
answer: 7652413
time: 739