您的位置:首页 > 其它

HDU 6063 RXD and math

2017-08-02 21:53 330 查看

RXD and math

[align=left]Problem Description[/align]
RXD is a good mathematician.

One day he wants to calculate:

∑i=1nkμ2(i)×⌊nki−−−√⌋

output the answer module 109+7.
1≤n,k≤1018

μ(n)=1(n=1)

μ(n)=(−1)k(n=p1p2…pk)

μ(n)=0(otherwise)

p1,p2,p3…pk
are different prime numbers

 

[align=left]Input[/align]
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.
 

[align=left]Output[/align]
For each test case, output "Case #x: y", which means the test case number and the answer.
 

[align=left]Sample Input[/align]

10 10

 

[align=left]Sample Output[/align]

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: