题目链接 http://acm.pdsu.edu.cn/problem.php?cid=1027&pid=7
RXD and math 时间限制: 2 Sec 内存限制: 128 MB
提交: 25 解决: 21
[ 提交][ 状态][ 讨论版] 题目描述 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 输入 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 . 输出 For each test case, output "Case #x: y", which means the test case number and the answer. 样例输入 10 10 样例输出 Case #1: 999999937 解题思路:
公式化简后,就是n^k。也就是说该题是求n^k.。是快速幂的应用,如果不会快速幂,且想快速学会快速幂的代码,那么请点击链接 http://blog.csdn.net/jiyi_xiaoli/article/details/76587519 如果想详细的理解快速幂,那么请点击链接 http://blog.csdn.net/jiyi_xiaoli/article/details/76578376
代码:
#include<iostream>using namespace std;const long long int mod=1e9+7;int pow(long long int a,long long int n){ long long int t=1; while(n) { if(n&1) t=(t%mod)*(a%mod)%mod; n=n>>1; a=(a%mod)*(a%mod); } return t;}int main(){ long long int n,k; int i=0; while(cin>>n>>k) { i++; cout<<"Case #"<<i<<": "; cout<<pow(n,k)<<endl; } return 0;}