HDU 6063 RXD and math (打表)

RXD and math

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


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
 

Source
 

题意:
有一个莫比乌斯函数,就是每当 μ2 ( i )的i含平方因子时,等于0,其他都等于1。

POINT:
对于know nothing的我,只能打表了。

//#include <iostream>
//#include <stdio.h>
//#include <string.h>
//#include <math.h>
//#include <algorithm>
//using namespace std;
//#define LL long long
//const LL N = 10000000+6;
//LL f[N];
//void init()
//{
//    for(LL i=1;i<=N;i++)
//    {
//        f[i]=1;
//    }
//    for(LL i=2;i<=sqrt(N);i++)
//    {
//        if(f[i]==0) continue;
//        LL now=i*i;
//        for(LL j=now;j<=N;j+=now)
//        {
//            f[j]=0;
//        }
//    }
//
//}
//void dfs(LL n,LL k)
//{
//    LL ans=0;
//    for(LL i=1;i<=(LL)pow(n,k);i++)
//    {
//        ans+=f[i]*(LL)floor(sqrt(pow(n,k)/(1.0*i)));
//    }
//    printf("n:%lld k:%lld ans:%lld\n",n,k,ans);
//}
//int main()
//{
//    init();
//    for(LL n=1;n<=10;n++)
//    {
//        for(LL k=1;k<=7;k++)
//        {
//
//                dfs(n,k);
//        }
//        }
//
//
//}
//
//#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define LL long long
const LL p = 1e9+7;
LL qkm(LL base,LL mi)
{
    LL ans=1;
    while(mi)
    {
        if(mi&1) ans*=base;
        base*=base;
        ans%=p;
        base%=p;
        mi>>=1;
    }
    return ans;
}
int main()
{
    LL n,k;
    int o=0;
    while(~scanf("%lld %lld",&n,&k))
    {
        n%=p;
        LL ans=qkm(n,k);
        printf("Case #%d: %lld\n",++o,ans);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值