태그 보관물: projecteuler

[Python] 20 – Factorial digit sum

[문제 링크]
http://projecteuler.net/problem=20

[문제 원본]
n! means n × (n − 1) × … × 3 × 2 × 1

For example, 10! = 10 × 9 × … × 3 × 2 × 1 = 3628800,
and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

Find the sum of the digits in the number 100!

[풀이방법]
1. 반복문을 통해 팩토리얼의 값을 구한다.
2. 팩토리얼 값을 String 타입으로 변경한다.
3. 변경된 String 값을 한자씩 추출하여 Integer 타입으로 변경한다.
4. 변경된 Integer 타입을 더한다.

[소스코드]

#20_FactorialDigitSum.py

num = 100
sum = 1
while(num > 0) :
	sum = sum * num
	num = num -1

strNum = str(sum)
num = 0
for i in range(0, len(strNum)):
	#print(strNum[i], end=' ')
	num = num  + int(strNum[i])

print("DigitSum=", num)

[Python] 16 – Power digit sum

[문제 링크]
http://projecteuler.net/problem=16
[문제 원본]
2^15 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.

What is the sum of the digits of the number 2^1000?

[소스 코드]

#python PowerDigitSum.py

input = input("number = ")
count = 1000
sum = 1;
for i in range(1, count+1):
    sum = sum * int(input)
str = str(sum)
print("Sum=", sum)

digitSum = 0
for j in range(0, len(str)):
    # print(str[j])
    digitSum = digitSum + int(str[j])
print("Digitsum=", digitSum)
print("Done")

[결과]
number = 2
Sum= 107150860718626732094842504906000181056140481170553360744375038837035105112
49361224931983788156958581275946729175531468251871452856923140435984577574698574
80393456777482423098542107460506237114187795418215304647498358194126739876755916
5543946077062914571196477686542167660429831652624386837205668069376
Digitsum= 1366
Done

[Python] 7 – 10001st prime

[문제 링크]
http://projecteuler.net/problem=7

[문제 원본]
By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10 001st prime number?

[문제 설명]
2에서 6번째에 해당하는 소수는 13이다. 그렇다면 10001번째 해당하는 소수는 몇인가?

[소스코드]

# problem_7.py
import custom_math
count = input("Input: ");
i = 2
while 1 : 
    if(custom_math.isPrime(i)) :
        count = count -1
    if(count == 0): 
        break
    i = i+1
print("Number is =", i)
# custom_math.py
import math
 
def isPrime(n): 
    result = True
    for i in range(2, int(math.sqrt(n)) + 1):
        if n%i == 0:
            result = False
            break
     
    return result

[결과]
Input: 10001
(‘Number is =’, 104743)

[Python] 6 – Sum square difference

[문제 링크]
http://projecteuler.net/problem=6

[문제 원본]

The sum of the squares of the first ten natural numbers is,

12 + 22 + … + 102 = 385

The square of the sum of the first ten natural numbers is,

(1 + 2 + … + 10)2 = 552 = 3025

Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640.

Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.

[문제 설명]
1~100까지 합의 제곱 에서 1의 제곱 더하기 2의 제곱 더하기 … 100의 제곱을 더한값을 뺀 값을 구하라.

[소스 코드]

import time
sTime = time.clock()
sqrAndSum = 0
sumAndSqr = 0
for i in range(1, 101):
    sqrAndSum = sqrAndSum + (i*i)

sumAndSqr = 0
for i in range(1, 101):
    sumAndSqr = sumAndSqr + i
sumAndSqr = (sumAndSqr * sumAndSqr)

print("Result=", sumAndSqr - sqrAndSum, "time=", (time.clock() - sTime) * 100)

[출력 결과]

(‘Result=’, 25164150, ‘time=’, 0.007399999999999768)

[Python] 10-Summation of primes

새벽에 회사에서 하던 주사위 풀이를 하려다 딴길로 빠졌습니다.
갑자기 뜬금 없는 Python 으로 간단한 문제 풀이를 했습니다. 생각보다 실행 시간이 오래 걸리네요.
그리고 문제 출처에 소수에 대한 부분이 많이 나오는거 같아 소수 판별을 함수로 분리 했습니다.

[문제 출처]
http://projecteuler.net/problem=10

[문제 내용]
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.

[소스 코드]

#summationOfPrimes.py
import coozplz_math
import time

var  = 2000000
sTime = time.clock()


sum = 0
for i in range(2, var-1):
	if(coozplz_math.isPrime(i)) :
		#print("PrimeNumber=", i)
		sum = sum + i
		
eTime = time.clock()
print("input = ", var, " sum =", sum, "time=", (eTime-sTime) * 100, "ms")		

		

#coozplz_math.py
import math

def isPrime(n):	
	result = True
	for i in range(2, int(math.sqrt(n)) + 1):
		if n%i == 0:
			result = False
			break
	
	return result

[출력 결과]
input = 20000 sum = 21171191 time= 6.096835393639568 ms
input = 200000 sum = 1709400814 time= 108.15298899502284 ms
input = 2000000 sum = 142913828922 time= 2501.15873463776 ms