정수론
- 모듈러의 성질
- 소수 판정
- 약수 구하기
- 소인수 분해
- 유클리드 호재법
- 에라토스테네스의 체
- 빠른 거듭제곱
(a+b) % c == (a%c + b%c) % c
(a*b) % c == (a%c * b%c) % c
(a-b) % c == (a%c - b%c + c) % c
(a+b) % c == (a//c - b//c) % c
1. 소수 판정
n= int(input())
cnt = 0
for i in range(1, n+1):
if i*i > n:
break
if n % i == 0:
cnt += 1
if n == 1:
print("NO")
if n == 1:
print("NO")
elif cnt == 1:
print("YES")
else:
print("NO")
2. 약수 구하기
n = int(input())
prime = []
for i in range(1, n+1):
if i*i > n:
break
if n % i == 0:
prime.append(i)
if i * i != n:
prime.append(n // i)
print(*prime)
3. 소인수 분해
n = int(input())
x = n
for i in range(2, n+1):
if i * i > n:
break
while x % i == 0:
print(i)
x //= i
if n != 1:
print(n)
4. 유클리드 호제법
a, b = map(int, input().split())
A, B = a, b
while a % b != 0:
a, b = b, a % b
print(b)
print(A * B // b)
5. 에라토스테네스의 체
n = int(input())
isPrime = [True for i in range(n+1)]
isPrime[1] = False
for i in range(2, n+1):
if not isPrime[i]:
continue
for j in range(2 * i, n+1, i):
isPrime[j] = False
print(*[i for i in range(n+1) if isPrime[i]])
n = int(input())
prime = [-1 for i in range(n+1)]
for i in range(2, n+1):
if prime[i] != -1:
continue
for j in range(i, n+1, i):
if prime[j] == -1:
prime[j] = i
print(*prime[2:])
6. 빠른 거듭 제곱
def pows(n, m):
if m == 0:
return 1
ret = pows(n, m // 2)
ret *= ret
ret %= 1000000007
if m % 2 == 0:
return ret * ret
else:
return (ret * n) % 1000000007
보나스
n, p = map(int, input().split())
cnt = 0
x = p
while x <= n:
cnt += n // x
x *= p
print(cnt)