Skip to content

Hannah #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions hannah/math/1110.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# 더하기 사이클

count = 0
def func(x):

global count

if x == n and count != 0:
return

count += 1

if x < 10:
return func((x % 10)*10 + x)
else:
return func((x % 10)*10 + (x // 10 + x % 10) % 10)

n = int(input())

func(n)
print(count)
10 changes: 10 additions & 0 deletions hannah/math/11653.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# 소인수분해

n = int(input())

while n != 1:
for i in range(2,n + 1):
if n % i == 0:
n = n // i
print(i)
break
27 changes: 27 additions & 0 deletions hannah/math/1747.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# 소수&팰린드롬

import math
import sys

def isPrimeNumber(x):
if x == 1 or x == 0:
return False

for i in range(2, int(math.sqrt(x)) + 1): # x == 2이면 for문 안돌고 바로 return True
if x % i == 0:
return False
return True

def isPalindrome(x):
if x == x[::-1]:
return True

input = sys.stdin.readline

n = int(input())

while 1:
if isPrimeNumber(n) and isPalindrome(str(n)):
print(n)
break
n += 1
20 changes: 20 additions & 0 deletions hannah/math/1934.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# 최소공배수

def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)

def lcm(a, b):
return a * b // gcd(a, b)

t = int(input())
tc = list()

for i in range(t):
n, m = map(int, input().split())
tc.append((n, m))

for i in range(t):
print(lcm(tc[i][0], tc[i][1]))
21 changes: 21 additions & 0 deletions hannah/math/1978.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# 소수 찾기
# 9:56~9:58

def isPrimeNumber(x):
if x == 1:
return 0

for i in range(2, x): # x == 2이면 for문 안돌고 바로 return True
if x % i == 0:
return 0
return 1

n = int(input())
inputs = list(map(int, input().split()))
count = 0

for i in inputs:
if isPrimeNumber(i) == 1:
count += 1

print(count)
52 changes: 52 additions & 0 deletions hannah/math/21275.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# 폰 호석만
# 4:57~
import time
start = time.time()

def transform(x, n):
result = 0
for i in range(len(x)):
if ord(x[i]) >= ord('a'):
result += (ord(x[i]) - ord('a') + 10) * n**(len(x) - 1 - i)
else:
result += int(x[i])*n**(len(x) - 1 - i)
return result

Xa, Xb = input().split()

alph = '0123456789abcdefghijklmnopqrstuvwxyz'
count = 0
X, A, B = -1, 0, 0

max_Xa, max_Xb = 2, 2
for i in range(len(Xa)):
max_Xa = max(max_Xa, alph.find(Xa[i])+1)
# 10(a)진법이면 0~9까지 쓰니까
# 예를들어 p가 최대값이면, (p+1)진법부터 가능성 있음

for i in range(len(Xb)):
max_Xb = max(max_Xb, alph.find(Xb[i])+1)

# print("max_Xa = ", max_Xa)
# print("max_Xb = ", max_Xb)


for a in range(max_Xa, 37):
for b in range(max_Xb, 37):
temp_Xa = transform(Xa, a)
if a == b or temp_Xa >= 2**63: # 주의: 문제 제한 조건으로 A != B, 0 <= X < 2**63 이 있음
break
if temp_Xa == transform(Xb, b):
A, B = a, b
X = temp_Xa
count += 1
# print("A = ", A, ", B = ", B, ", X = ", X, ", count = ", count)

if count > 1 or X == 0:
print("Multiple")
elif count == 1:
print(X, " ", A, " ", B)
else:
print("Impossible")

print("time :", time.time() - start)
26 changes: 26 additions & 0 deletions hannah/math/21919.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# 소수 최소 공배수
# isPrimeNumber의 for문 최적화 (제곱근까지로 변경)
# 백준에서 출력 초과가 뜸 -> 소수가 중복일 수 있다는 것 고려안해서 리스트를 set으로 감싸고 다시 list로 바꿔줘서 정답!

import math

def isPrimeNumber(x):
if x == 1 or x == 0:
return False

for i in range(2, int(math.sqrt(x)) + 1): # x == 2이면 for문 안돌고 바로 return True
if x % i == 0:
return False
return True

n = int(input())
inputs = list(set(list(map(int, input().split()))))
result = 1
for i in inputs:
if isPrimeNumber(i):
result *= i

if result == 1:
print(-1)
else:
print(result)
25 changes: 25 additions & 0 deletions hannah/math/21920.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# 서로소 평균
# 서로소 = 최대공약수가 1인 두 자연수

import sys
import math

def isCoprime(x, y):
if math.gcd(x, y) == 1:
return True
else:
return False

n = int(input())
inputs = list(map(int, sys.stdin.readline().rstrip().split()))
x = int(input())

sum = 0
count = 0
for num in inputs:
if isCoprime(x, num):
sum += num
count += 1

avg = sum / count
print(avg)
16 changes: 16 additions & 0 deletions hannah/math/22864.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# 피로도
a, b, c, m = map(int, input().split())

p = 0
amountOfWork = 0

for i in range(24):
if p + a <= m:
p += a
amountOfWork += b
else:
p -= c
if p < 0:
p = 0

print(amountOfWork)
71 changes: 71 additions & 0 deletions hannah/math/22943 (copy).py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# 수

import sys
import math
import itertools

def getPrimeNumbers(k): # k로 정의되는 범위 내의 모든 소수를 리스트로 반환
numbers = list(num_range)
start, end = numbers[0], numbers[-1]+1
if start == 1:
start = 2
print("start = ", start, ", end = ", end)
primes = list() # 소수를 따로 저장할 리스트
sieve = [True] * end

for i in range(start, end):
if sieve[i] != False:
primes.append(i)
for j in range(i * 2, end, i):
sieve[j] = False
return primes

input = sys.stdin.readline

k, m = map(int, input().split())

num_range = range(10**(k-1), 10**k)

result = [False for x in num_range]

primes = getPrimeNumbers(k)
print("primes = ", primes)



def isSumOfDifferentPrimeNumber(x): # 서로 다른 두 개의 소수의 합인지
print(x, ": isSum~ start")
# 이중 for문, x까지 모든 소수
numbers1 = primes
for i in numbers1:
for j in numbers1:
if i == j:

continue
if i + j == x:
print("True: x = ", x, ", i = ", i, ", j = ", j)
return True
print("False: x = ", x, ", i = ", i, ", j = ", j)
return False

def isSatisfied2ndCondition(x, m):
num = x % m
primes = getPrimeNumbers(x)
for i in primes:
for j in primes:
if num == i * j:

return True
return False
print("result = ", result)
for i in num_range:
if isSumOfDifferentPrimeNumber(i) == False:
print("조건1: removed number = ", i)
result[i] = False
print(result)
# for num in num_range:
# if isSatisfied2ndCondition(num, m) == False:
# result.remove(num)

# print(result)

63 changes: 63 additions & 0 deletions hannah/math/22943.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# 수

import sys
import time

def getPrimeNumbers(k): # k로 정의되는 범위 내의 모든 소수를 리스트로 반환
numbers = list(num_range)
start, end = numbers[0], numbers[-1]+1
if start == 1:
start = 2
primes = list() # 소수를 따로 저장할 리스트
sieve = [True] * end

for i in range(start, end):
if sieve[i] != False:
primes.append(i)
for j in range(i * 2, end, i):
sieve[j] = False
return primes

input = sys.stdin.readline

k, m = map(int, input().split())

num_range = range(10**(k-1), 10**k)

result = [False for x in range(10**k)]

primes = getPrimeNumbers(k)
# print("primes = ", primes)

def isSumOfDifferentPrimeNumber(x): # 서로 다른 두 개의 소수의 합인지
# 이중 for문, x까지 모든 소수
numbers1 = primes
for i in numbers1:
for j in numbers1:
if i == j:

continue
if i + j == x:
# print("True: x = ", x, ", i = ", i, ", j = ", j)
return True
# print("False: x = ", x, ", i = ", i, ", j = ", j)
return False

def isSatisfied2ndCondition(x, m):
num = x % m
primes = getPrimeNumbers(x)
for i in primes:
for j in primes:
if num == i * j:
return True
return False
# print("result = ", result)

for i in num_range:
if isSumOfDifferentPrimeNumber(i):
result[i] = True
if isSatisfied2ndCondition(i, m) == False:
result[i] = False

# print("조건2 끝 result: ", result)
print(result.count(True))
Loading