### 문제 1.
### 10보다 작은 자연수 중에서 3 또는 5의 배수는
### 3,5,6,9가 존재해요! 이것들의 합은 23입니다.

### 1000보다 작은 자연수 중에서 3 또는 5의 배수들을
### 구해서 모두 합하면 얼마인가요?
#######################################################################################
sum1=0
for a in range(1,1001):
    if a%3==0 or a%5==0:
        sum1 +=a
print(sum1)
#######################################################################################
### 문제 2.
### 피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다.
### 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.

### 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
### 짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?
#######################################################################################
a2=list()
total2=[1,2]

# for a in range(2,200):
#     a2.append(total2[a - 2] + total2[a - 1])
a=2
b2=0
sum2=0
while b2<=4000000:
    a22=total2[a-2]
    a12=total2[a-1]
    b2=a12+a22
    total2.append(b2)
    a+=1
    if b2%2==0:
        sum2+=b2
sum2 +=2
print(sum2)
#######################################################################################
## 문제 3.
## 알파벳 대소문자로 된 문자열이 주어지면,
## 이 문자열에서 가장 많이 사용된 알파벳이
## 무엇인지 출력하는 프로그램을 작성하시오.
## 단, 대소문자는 구별하지 않아요. 만약 동률이 존재하는 경우
## 알파벳 순으로 제일 앞에 있는
## 문자를 출력하세요.

## 문자열) "This is a sample Program mississippi river"
## 문자열) "abcdabcdababccddcd"
########################################################################################

# ans="This is a sample Program mississippi river"
# ans.lower()
# set(ans) #set 함수!!
# list3=list()
# list3.append(ans)
# a3=0
#
# while True:
#     b3=list3[0][a3]
#     list32.append(b3)
#     a3+=1


#######################################################################################
## 문제 4.
## 로또 프로그램 작성
## 5000원으로 로또복권을 5장 자동으로 구매합니다.
## 이번 주 로또 당첨번호를 생성하여 로또 당첨을 확인하세요!
## 쉬운버전으로 먼저 작성합니다.
## 6숫자가 다 맞으면 1등, 5개 맞으면 2등으로 처리합니다.
## 즉, 쉬운버전은 보너스 숫자는 없는 것으로 간주합니다.
## 쉬운버전을 해결했다면
## 보너스 숫자를 이용하여 로또 당첨을 확인합니다.
## 보너스 숫자를 제외한 모든 숫자가 다 맞으면 1등,
## 보너스 숫자를 포함하여 6개의 숫자가 맞으면 2등,
## 보너스를 제외하고 5개의 숫자가 맞으면 3등으로 처리합니다.

## 쉬운버전의 출력은 1등 몇개, 2등 몇개, 3등 몇개,
## 4등 몇개, 꽝 몇개로 출력
## 어려운버전의 출력은 1등 몇개, 2등 몇개, 3등 몇개,
## 4등 몇개, 5등 몇개, 꽝 몇개로 출력

## 랜덤값을 도출하기 위해서는 다음의 코드를 이용한다.
# import random
#
# i = random.randint(1, 100)  # 1부터 100 사이의 임의의 정수
# f = random.random()  # 0부터 1 사이의 임의의 float
# i = random.randrange(1, 101, 2)  # 1부터 100 사이의 임의의 짝수
# i = random.randrange(10)  # 0부터 9 사이의 임의의 정수

##### 추가문제
##### 1등에 당첨될려면 평균적으로 얼마만큼의 돈을 투자해야 할까요?
##### 로또 1게임은 1000원입니다.
#######################################################################################
import random

def lotto():
    my_list=list()
    for b in range(0, 6):
        b4 = random.randint(1, 45)
        my_list.append(b4)
        if b4 in my_list:
            my_list.pop()
            x = random.randint(1, 45)
            my_list.append(x)
    return my_list


def correct(my_list,my_list2):
    print(my_list) #답
    print(my_list2) #내꺼
    c=0
    for tmp in range(0, 6):
        a = my_list[tmp]
        b = my_list2.count(a)
        c += b

    print(f"맞은 갯수는 {c}")
    if c== 6:
        print("축하합니다 1등입니다.")
    elif c== 5:
        print("축하합니다 2등입니다.")
    elif c== 4:
        print("축하합니다 3등입니다.")
    elif c== 3:
        print("축하합니다 4등입니다.")
    else:
        print("다음기회에,,")

a41=lotto()
a42=lotto()
a43=lotto()
a44=lotto()
a45=lotto()
ans=lotto()
# correct(ans,a41)

def lottohard():
    my_list=list()
    for b in range(0, 7):
        b4 = random.randint(1, 45)
        my_list.append(b4)
        if b4 in my_list:
            my_list.pop()
            x = random.randint(1, 45)
            my_list.append(x)
    return my_list

def correcthard(my_list,my_list2):
    print(my_list) #답
    print(my_list2) #내꺼
    d=my_list.pop()
    c=0
    for tmp in range(0, 6):
        a = my_list[tmp]
        b = my_list2.count(a)
        c += b
        if c==5:
            k = my_list2.count(d)
            if k==1:
                print(f"맞은 갯수는 {c}와 보너스 1개")
                print("축하합니다! 2등입니다!")
                return
    print(f"맞은 갯수는 {c}")
    if c== 6:
        print("축하합니다 1등입니다.")
    elif c== 5:
        print("축하합니다 3등입니다.")
    elif c== 4:
        print("축하합니다 4등입니다.")
    elif c== 3:
        print("축하합니다 5등입니다.")
    else:
        print("다음기회에,,")

ans1=lottohard()
# correcthard(ans1,a41)
#######################################################################################
## 문제 5.
## 어떤 수를 소수의 곱으로만 나타내는 것을 소인수분해라 하고,
## 이 소수들을 그 수의 소인수라고 합니다.
## 예를 들면 13195의 소인수는 5, 7, 13, 29 입니다.

## 600851475143의 소인수 중에서 가장 큰 수를 구하세요.
#######################################################################################
# k5=list()
# solos=list()
# kt5=list()
# for a in range(3,60085147):
#     for c in range(2,a):
#         k5.append(a%c)
#         if 0 in k5:
#             k5 = list()
#             break
#         else:
#             solos.append(a)
#             break
#
# mat5=600851475143
#
# for tmp in solos:
#     if mat5%tmp==0:
#         kt5.append(tmp)
#
# print(kt5)
#######################################################################################
## 문제 6.
## 앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이
## 같은 수를 대칭수(palindrome)라고 부릅니다.

## 두 자리 수를 곱해 만들 수 있는 대칭수 중
## 가장 큰 수는 9009 (= 91 × 99) 입니다.

## 세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수를 구하세요

# d=list()
#
# for a in range(1,1000):
#     for b in range(1,1000):
#         c=a*b
#         c1=str(c)
#         c2=c1[::-1]
#         if c1==c2:
#             d.append(c1)
#             print(a)
#             print(b)
#999*91
#######################################################################################
## 문제 7.
## 1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다.

## 그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까?
#######################################################################################
# def maxyak(a,b):
#     n=0
#     while True:
#         m= a%b
#         a=b
#         b=m
#         if m==0:
#             n=a
#             break
#     return n
# k=1
# for i in range(2,21,1):
#     k = k * i //maxyak(k,1)
# print(k)
#######################################################################################
## 문제 8.
## 1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다 (제곱의 합).
## 1**2 + 2**2 + ... + 10**2 = 385

## 1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다 (합의 제곱).
## (1 + 2 + ... + 10)**2 = 552 = 3025

## 따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의
## 차이는 3025 - 385 = 2640 이 됩니다.

## 그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는
## 얼마입니까?
#######################################################################################
def crosssum(x,y):
    b=list()
    for a in range(x,y+1):
        c=a**2
        b.append(c)
    return sum(b)

def sumcross(x,y):
    b=list()
    for a in range(x,y+1):
        c=a
        b.append(c)
    d=sum(b)
    e=d**2
    return e

print(sumcross(1,100)-crosssum(1,100))
#######################################################################################
## 문제 9.
## 소수를 크기 순으로 나열하면 2, 3, 5, 7, 11, 13, ... 과 같이 됩니다.

## 이 때 10,001번째의 소수를 구하세요.
#######################################################################################
k5=list()
solos=list()
kt5=list()
for a in range(3,100000):
    for c in range(2,a):
        k5.append(a%c)
        if 0 in k5:
            k5 = list()
            break
        else:
            solos.append(a)
            break
print(solos[10000])
#######################################################################################
## 문제 10.
## 세 자연수 a, b, c 가 피타고라스 정리 a**2 + b**2 = c**2 를 만족하면
## 피타고라스 수라고 부릅니다 (여기서 a < b < c ).
## 예를 들면 3**2 + 4**2 = 9 + 16 = 25 = 5**2이므로
## 3, 4, 5는 피타고라스 수입니다.

## a + b + c = 1000 인 피타고라스 수 a, b, c는 한 가지 뿐입니다.
## 이 때, a × b × c 는 얼마입니까?
#######################################################################################
import math
def pita(a,b):
    c=math.sqrt(a**2+b**2)
    if a+b+c==1000:
        print("정답!")
        print(a)
        print(b)
        print(c)
    else:
        d=1000-a-b-c
        return d

for a in range(1,1000):
    for b in range(1,1000):
        pita(a,b)
        if pita ==0:
            print(a)
            print(b)
print(375*200*425)
