分析:
这道题要理解对题目的意思,题目中给出 A 和 B , N = A^B ,如果a1 , a2 , a3 , a4....an为N的因子,则求a1,a2,a3的因子个数的立方和(summing the cube of number of factors of all ais.)
一个大于1的自然数A=a1^p1*a2^p2*...,则 N 的因数个数为(1+p1)*(1+p2)*(1+p3)*...*(1+pn),(0,1..p1)*(0,1p2)*...*(0 , 1 ,pn);
ans = (1^3 + 2^3 + 3^3 +(1 + p1)^3)*(1^3 + 2^3 + 3^3 +(1 + p2)^3) *.....*((1^3 + 2^3 + 3^3 +(1 + pn)^3))
A^B的因子总数(0*B,1*B,.....p1*B) * (0*B, 1*B , ... , p2*B)*.....*(0*B , 1*B , ..... pn*B)
ans = ((1*B)^3 + (2*B)^3 + (3*B)^3 +.....+ (p1*B)^3 ) * ((1*B)^3 + (2*B)^3 + (3*B)^3 +.....+ (p2*B)^3 )* ... *(((1*B)^3 + (2*B)^3 + (3*B)^3 +.....+ (pn*B)^3 ))
。。。。
//公式1^3 + 2^3 +3^3 +.....+ n^3 = n^2*(n+1)^2/4.
#include"stdio.h"
#include"string.h"
int prime[201];
int p[1011];
int cnt;
void fun()
{
int i,j;
cnt=0;
memset(p,0,sizeof(p));
for(i=2;i<=1010;i++)
{
if(p[i]==0)
{
for(j=i+i;j<=1010;j+=i)
p[j]=1;
}
if(p[i]==0)prime[cnt++]=i;
}
}
int main()
{
int T;
int i,k,t;
__int64 A,B,ans;
fun();
T=1;
while(scanf("%I64d%I64d",&A,&B)!=-1)
{
ans=1;i=0;
B%=10007;
i=0;
while(A>1&&i<cnt)
{
k=0;
while(A%prime[i]==0)
{
k++;
A/=prime[i];
}
t=(k*B+1)*(k*B+2)/2%10007;
t=t*t%10007;
ans=ans*t%10007;
i++;
}
if(A>1)
{
t=(B+1)*(B+2)/2%10007;
t=t*t%10007;
ans=ans*t%10007;
}
printf("Case %d: %I64d\n",T++,ans);
}
return 0;
}