11693번: n^m의 약수의 합
nm의 모든 약수의 합을 1,000,000,007로 나눈 나머지를 출력한다.
www.acmicpc.net
등비수열의 합 이용
예를 들어
어떤 수
소수
첫째항이 1이고, 공비가
제 1항부터 제
(p-1)으로 나누는 부분은 모듈러 역수로 곱해줘야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
MOD=1000000007
def getPow(a, x):
ret=1
while x:
if x&1:
ret=(ret*a)%MOD
a=(a*a)%MOD
x>>=1
return ret
n,m=map(int,input().split())
ans=1
for i in range(2, int(n**0.5)+1):
if n%i==0:
c = 0
while n%i==0:
n//=i
c+=1
ans *= ( ( (getPow(i, c*m + 1)+MOD-1)%MOD ) * ( (getPow(i-1, MOD-2))%MOD ) )%MOD
ans %= MOD
if n!=1:
ans *= ( ( (getPow(n, m+1)+MOD-1)%MOD ) * ( (getPow(n-1, MOD-2))%MOD ) )%MOD
print(ans%MOD)
|
cs |
19번째 줄을 보면

내 머리에는 들어왔는데 설명하려니 힘들다
'백준 문제풀이' 카테고리의 다른 글
백준 14180 - 배열의 특징 [Python] (0) | 2021.05.09 |
---|---|
백준 2315 - 가로등 끄기 [Python] (0) | 2021.05.06 |
백준 1396 - 크루스칼의 공 [Python] (0) | 2021.04.28 |
백준 1994 - 등차수열 [Python / C++] (0) | 2021.04.28 |
백준 3687 - 성냥개비 [Python] (0) | 2021.04.28 |