일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 작도
- 재귀함수
- 하합
- 큰 수의 법칙
- 프로젝트 오일러
- 정오각형
- algeomath
- 알지오매스
- 오일러
- 제곱근의뜻
- python
- 블록코딩
- 삼각함수의그래프
- 상합
- 피타고라스 정리
- project euler
- 파이썬
- java
- 큰수의법칙
- counting sunday
- 지오지브라
- 리만합
- 구분구적법
Archives
- Today
- Total
이경수 선생님의 수학실험실
Problem 35(Circular primes) 본문
Problem 35(Circular primes)
The number, 197, is called a circular prime because all rotations of the digits: 197, 971, and 719, are themselves prime.
There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97.
How many circular primes are there below one million?
In Python:
import time
import math
startTime = time.time()
def circular(n):
nStr = str(n)
return int((nStr[-1] + nStr)[:-1])
def isprime(n):
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
def iscircularprime(n):
count = 0
digit = int(math.log10(n)) + 1
for i in range(0, digit):
if isprime(n) is False:
break
n = circular(n)
count += 1
if count == digit:
return True
list = [2]
for n in range(3, 10 ** 6, 2):
if iscircularprime(n) is True:
list.append(n)
print(len(list))
print(time.time() - startTime, "seconds")
Run time: 7.69934606552124 seconds
In Python:
import time
import math
startTime = time.time()
def circular(n):
nStr = str(n)
return int((nStr[-1] + nStr)[:-1])
def isprime(n):
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
def iscircularprime(n):
count = 0
digit = int(math.log10(n)) + 1
for i in range(0, digit):
if isprime(n) is False:
break
n = circular(n)
count += 1
if count == digit:
return True
list = []
primeCheck = [1 for i in range(2, 10 ** 6)]
for n in range(2, 10 ** 6):
if primeCheck[n - 2] == 0:
continue
else:
if iscircularprime(n) is True:
list.append(n)
q = (10 ** 6) // n
for i in range(1, q):
primeCheck[n * i - 2] == 0
print(len(list))
print(time.time() - startTime, "seconds")
Run time: 12.151581764221191 seconds
In Java:
//Euler35 Circular primes
package project_euler31_40;
import java.util.ArrayList;
import java.math.*;
public class Euler35 {
public static Boolean isprime(int n) {
for (int i = 2; i < Math.sqrt(n) + 1; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static int circular(int n) {
int firstNum;
String nStr = "";
String data[];
ArrayList<Integer> nList1 = new ArrayList<Integer>();
ArrayList<Integer> nList2 = new ArrayList<Integer>();
nStr = Integer.toString(n);
data = nStr.split("");
for (int i = 0; i < data.length; i++) {
nList1.add(Integer.parseInt(data[i]));
}
firstNum = nList1.get(0);
nList2.addAll(nList1.subList(1, nList1.size()));
nList2.add(firstNum);
n = 0;
for (int i = 0; i < nList2.size(); i++) {
n = n * 10 + nList2.get(i);
}
return n;
}
public static Boolean iscircularprime(int n) {
int count = 0;
int digit = (int) Math.log10(n) + 1;
int div = 0;
int r = 0;
div = n;
for (int i = 0; i < digit; i++) {
r = Math.floorMod(div, 10);
if (r == 0) {
return false;
}
div = Math.floorDiv(div, 10);
}
for (int i = 0; i < digit; i++) {
if (isprime(n) == false) {
break;
}
n = circular(n);
count ++;
}
if (count == digit) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
ArrayList<Integer> resultList = new ArrayList<Integer>();
resultList.add(2);
for (int n = 3; n < Math.pow(10, 6); n += 2) {
if (iscircularprime(n) == true) {
resultList.add(n);
}
}
System.out.println(resultList.size());
long endTime = System.currentTimeMillis();
System.out.println((double)(endTime - startTime)/(double)1000 + "seconds");
}
}
Run time: 0.808seconds
Solution: 55
'Project Euler' 카테고리의 다른 글
Problem 37(Truncatable primes) (0) | 2019.06.06 |
---|---|
Problem 36(Double-base palindromes) (0) | 2019.06.06 |
Problem 34(Digit factorials) (0) | 2019.06.02 |
Problem 33(Digit cancelling fractions) (0) | 2019.05.27 |
Problem 32(Pandigital products) (0) | 2019.05.19 |
Comments