본문 바로가기
[파이썬]프로젝트 오일러 #5 1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다. 그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까? 최소공배수를 구해보면서 위 사진에 나온것과 같은 규칙을 얻었다. n = 20 multiple = 1 a = [False, False] + [True]*(n-1) #소수를 구하는 알고리즘(0~n까지의 배열 체를 만드는 과정) for i in range(2, n+1): if a[i]: #i가 소수라면 multiple = multiple*i primebreak = True for k in range(n, 2, -1): for l in range(2, n): if (k==i**l): multiple = multiple*(i**(l-1)) primeb.. 2022. 9. 25.
[파이썬]프로젝트 오일러 #4 앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다. 두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 × 99) 입니다. 세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까? a = [] for i in range(1, 1000): for j in range(1, 1000): num = i * j if num >= 100000: if (int(str(num)[0])== int(str(num)[5])) and (int(str(num)[1])== int(str(num)[4])) and (int(str(num)[2])== int(str(num)[3])): a.append(num) print(max(a)) 1학기때 코딩도.. 2022. 9. 18.
[파이썬]프로젝트 오일러 #3 어떤 수를 소수의 곱으로만 나타내는 것을 소인수분해라 하고, 이 소수들을 그 수의 소인수라고 합니다. 예를 들면 13195의 소인수는 5, 7, 13, 29 입니다. 600851475143의 소인수 중에서 가장 큰 수를 구하세요. n = 600851475143 prime = [] i = 2 while n>=i: #마지막으로 나눠진 나머지가 나누는 숫자보다 작아지면 계산을 그만하기위한 반복문 if n%i == 0: prime.append(i) n = n//i else: i += 1 list(set(prime)) print(prime[-1]) 600851475143란 숫자 대신 생각하기 쉬운 140이란 숫자를 가지고 알고리즘을 구상했다. n을 2부터 시작해 나눠질때까지 나누고 더이상 나눠지지 않으면 1식 늘.. 2022. 9. 18.
[파이썬]프로젝트 오일러 #2 피보나치수열에서 400만 이하이면서 짝수인 항의 합 *피보나치 수열 :첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열 a = 1 b = 2 pibo = 0 sum = 2 while pibo 2022. 9. 12.
[파이썬]프로젝트 오일러 #1 1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더한 값 sum = 0 #합을 저장할 변수 for n in range(1, 1000): if (n%3 == 0) or (n%5==0): #1~1000까지의 숫자중 3의 배수거나 5의 배수면 sum변수에 숫자를 더한다 sum += n print(sum) 답 : 233168 처음엔 3의 배수와 5의 배수를 다른 명령문으로 따로 더하고 중복되는 15의 배수를 다시 빼줘야하나라는 생각이 제일 먼저 들었다. 문제를 다시보니 3 "또는" 5의 배수 라고 적혀져 있어서 그 문장을 그대로 코드로 만들었다. 하지만 처음 방식대로 코드를 실행하면 0.00064 sec가 걸리고 후자의 방식으로 코드를 실행하면 0.00120 sec가 걸린다........ 2022. 9. 12.