일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Geogebra
- 삼각함수의그래프
- 확률실험
- 오일러
- 제곱근의뜻
- 큰 수의 법칙
- 알지오매스
- java
- 피타고라스 정리
- 시뮬레이션
- 블록코딩
- 지오지브라
- python
- 큰수의법칙
- 정오각형
- 프랙탈
- 리만합
- 재귀함수
- 상합
- 수학탐구
- project euler
- 작도
- 몬테카를로
- algeomath
- 이항분포
- 구분구적법
- 프로젝트 오일러
- 하합
- counting sunday
- 파이썬
Archives
- Today
- Total
이경수 선생님의 수학실험실
Problem 41(Pandigital prime) 본문
Problem 41(Pandigital prime)
We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime.
What is the largest n-digit pandigital prime that exists?
In Python:
import math
import time
def isprime(n):
if n == 0 or n == 1:
return False
else:
for i in range(2, n):
if n % i == 0:
return False
return True
def swap(s, i, j):
nList = list(s)
nList[j], nList[i] = nList[i], nList[j]
return ''.join(nList)
def undersort(s, i):
nList = list(s)
nList = nList[0: i] + sorted(nList[i:])
return ''.join(nList)
def lexico(nStr):
lenStr = len(nStr)
for i in range(lenStr - 2, -1, -1):
for j in range(lenStr - 1, i, -1):
if int(nStr[i]) < int(nStr[j]):
nStr = swap(nStr, i, j)
nStr = undersort(nStr, i + 1)
return nStr
startTime = time.time()
nStr = '1234567'
cStr = math.factorial(len(nStr))
panList = [1234567]
for i in range(1, cStr):
nStr = lexico(nStr)
panList.append(int(nStr))
for i in range(cStr, 1, -1):
if isprime(panList[i - 1]):
print(panList[i - 1])
break
print(time.time() - startTime, "seconds")
Run time: 0.7171950340270996 seconds
In Java:
package project_euler41_50;
import java.util.ArrayList;
import java.util.Collections;
public class Euler41 {
public static Boolean isprime(int n) {
if (n == 0 || n == 1) {
return false;
} else {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
public static int factorial(int n) {
if (n == 1) {
return 1;
}
return n * factorial(n - 1);
}
public static String swap(String s, int i, int j) {
int temp;
String nstr="";
String nData[];
ArrayList<Integer> nList = new ArrayList<Integer>();
nData = s.split("");
for (int k = 0; k < nData.length; k++) {
nList.add(Integer.parseInt(nData[k]));
}
temp = nList.get(i);
nList.set(i, nList.get(j));
nList.set(j, temp);
for (int num : nList) {
nstr += Integer.toString(num);
}
return nstr;
}
public static String undersort(String s, int i) {
String nstr = "";
String nData[];
ArrayList<Integer> nList1 = new ArrayList<Integer>();
ArrayList<Integer> nList2 = new ArrayList<Integer>();
nData = s.split("");
for (int k = 0; k < i; k++) {
nList1.add(Integer.parseInt(nData[k]));
}
for (int k = i; k < nData.length; k++) {
nList2.add(Integer.parseInt(nData[k]));
}
Collections.sort(nList2);
nList1.addAll(nList2);
for (int num : nList1) {
nstr += Integer.toString(num);
}
return nstr;
}
public static String lexico(String s) {
int check = 0;
int lenStr = s.length();
String nStr = "";
String nData[];
ArrayList<Integer> nList = new ArrayList<Integer>();
nData = s.split("");
for (int k = 0; k < nData.length; k++) {
nList.add(Integer.parseInt(nData[k]));
}
for (int i = lenStr - 2; i > -1; i--) {
for (int j = lenStr - 1; j > i; j--) {
if (nList.get(i) < nList.get(j)) {
nStr = swap(s, i, j);
nStr = undersort(nStr, i + 1);
check = 1;
break;
}
}
if (check == 1) {
break;
}
}
return nStr;
}
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
String nStr = "1234567";
int cStr = factorial(nStr.length());
ArrayList<Integer> panList = new ArrayList<Integer>();
panList.add(1234567);
for (int i = 1; i < cStr; i++) {
nStr = lexico(nStr);
panList.add(Integer.parseInt(nStr));
}
for (int i = cStr; i > 1; i--) {
if (isprime(panList.get(i - 1))) {
System.out.println(panList.get(i - 1));
break;
}
}
long endTime = System.currentTimeMillis();
System.out.println((double)(endTime - startTime)/(double)1000 + "seconds");
}
}
Run time: 0.253seconds
Solution: 7652413
'Project Euler' 카테고리의 다른 글
Problem 43(Sub-string divisibility) (0) | 2019.07.24 |
---|---|
Problem 42(Coded triangle numbers) (0) | 2019.07.24 |
Problem 40(Champernowne's constant) (0) | 2019.06.16 |
Problem 39(Integer right triangles) (0) | 2019.06.16 |
Problem 38(Pandigital multiples) (0) | 2019.06.15 |
Comments