RXD and math
Problem Description
RXD is a good mathematician.
One day he wants to calculate:
output the answer module 10
9
+7
.
1≤n,k≤10
18![]()
p
1
,p
2
,p
3
…p
k![]()
are different prime numbers
One day he wants to calculate:
∑
i=1
n
k![]()
μ
2
(i)×⌊n
k![]()
i![]()
![]()
−
−
−![]()
√
⌋
output the answer module 10
1≤n,k≤10
μ(n)=1(n=1)
μ(n)=(−1)
k
(n=p
1
p
2
…p
k
)
μ(n)=0(otherwise)
p
Input
There are several test cases, please keep reading until EOF.
There are exact 10000 cases.
For each test case, there are 2 numbers n,k
.
There are exact 10000 cases.
For each test case, there are 2 numbers n,k
Output
For each test case, output "Case #x: y", which means the test case number and the answer.
Sample Input
10 10
Sample Output
Case #1: 999999937
这道题刚开始的时候不知道μ函数是个什么意思,后来题目更新了之后我没怎么看题,队友直接给我说的题意,结果想了很久都没思路。
最后过了好久队友给我说题意不是这样的,化简完式子后就只剩下n^k了,直接快速幂就可以得到答案了。
AC代码:
#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
const int mod = 1e9+7;
long long int quick_pow(long long int a,long long int b,long long int m)
{
long long int ans=1;
while(b)
{
if(b&1)
ans=ans*a%m;
b>>=1;
a=a*a%m;
}
return ans;
}
int main()
{
int T=1;
long long int n,k;
while(~scanf("%I64d %I64d",&n,&k))
{
printf("Case #%d: %I64d\n",T++,quick_pow(n%mod,k,mod));
}
return 0;
}