杭州网络预赛1004 Deciphering Password

 

真糟糕,被%耍了一晚多写两个就超时了……真不应该到现在才来把这题干掉

#include <iostream>
using namespace std;

#define MAXN 1001

__int64 a,b;
int prim[MAXN],pcnt;
bool is_prim[MAXN];

void prepare(){
    memset(is_prim,
true,sizeof(is_prim));
    pcnt
=0;
    __int64 i,j;
    
for(i=2;i<MAXN;i++){
        
if(is_prim[i]){
            
for(j=i;i*j<MAXN;j++)
                is_prim[i
*j]=false;
            prim[pcnt
++]=i;
        }
    }
}



int main(){
    __int64 i,j,k,ans,tt,T
=1;
    prepare();
    
while(scanf("%d%d",&a,&b)!=EOF){
        ans
=1;
        
        b
%=10007;//( j * b + 1) %10007 = ( j % 10007 * b % 10007 % 10007 + 1 ) % 10007
        for(i=0;i<pcnt && prim[i]*prim[i]<=&& a!=1;i++){
            
for(j=0;a%prim[i]==0;j++)
                a
/=prim[i];
            tt
=(j*b+1)*(j*b+2)/2%10007;//立方和公式
            tt*=tt;
            ans
=ans*tt%10007;
        }
        
if(a!=1){
            tt
=(b+1)*(b+2)/2%10007;
            tt
*=tt;
            ans
=ans*tt%10007;
        }
        printf(
"Case %I64d: %I64d\n",T++,ans);
    }
    
return 0;
}

 

请见:积性函数

posted @ 2008-11-30 00:08  Beetlebum  阅读(263)  评论(0编辑  收藏  举报