hdu6063RXD and math(快速幂找规律)

来源:互联网 发布:win10网络时间同步 编辑:程序博客网 时间:2024/06/07 22:47

RXD and math

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 856    Accepted Submission(s): 468


Problem Description
RXD is a good mathematician.
One day he wants to calculate:
i=1nkμ2(i)×nki

output the answer module 109+7.
1n,k1018
μ(n)=1(n=1)

μ(n)=(1)k(n=p1p2pk)

μ(n)=0(otherwise)

p1,p2,p3pk are different prime numbers
 

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.
 

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都是10^18,很大,所以找规律,打表打出的(1,1) ,(1,2),(1,3),(1,4)(2,1)(2,2)。。。
(10,1),(10,2),(10,3),(10,4)的所有值找出规律,就是求n^k快速幂
#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>#include <iostream>#define mod 1000000007using namespace std;#define ll long longlong long pow3(long long a,long long b){    long long ans = 1,base=a%mod;///这里注意取模    while(b)    {        if(b&1)            ans = (ans*base)%mod;        base= (base*base)%mod;        b>>=1;    }    return ans;}int main(){    long long n,k;    int ca=1;    while(scanf("%lld %lld",&n,&k)!=EOF)    {        long long ans=pow3(n,k);        printf("Case #%d: %lld\n",ca++,ans);    }    return 0;}


 
原创粉丝点击