2008年趣题一道
											(2008个1)的(2008个1)次方 mod 2008 =?2008个1就是 11...1 一共2008位
闲着没事自己想的题目,哈哈
 程序代码:
程序代码:
int modExp_bigint(a,b,k)
{
    int res=1;
    int y=a mod k;// O( length(a) )
    while(b>0){ //O( length(b) )
        r=b mod 10; //如果b是按照10进制存储 ,这里只需取一位 O(1)
        res=res*modExp_int(y,r,k) mod k; //O(log r)<O(log10)=O(1)
        y=modExp_int(y,10,k); //O(log10)=O(1)
        b/=10;  //如果b是按照10进制存储 ,这里只需移动指针 O(1)
    }
    return res;
}
 程序代码:
程序代码:
#include <iostream>
using namespace std;
int modExp_int(int a,int b,int m)
{
    int t=1,y=a%m;
    while(b){
        if(b&1){
            t=t*y%m;
        }
        y=y*y%m;
        b=(b>>1);
    }
    return t;
}
int modExp2008()
{
    int res=1,y=0;
    for(int i=0;i<2008;i++){
        y=(y*10+1)%2008;
    }
    for(int i=0;i<2008;i++){
        res=res*modExp_int(y,1,2008)%2008;
        y=modExp_int(y,10,2008);
    }
    return res;
}
int modExp2008v2()
{
    int a=0;
    for(int i=0;i<2008;i++){
        a=(a*10+1)%2008;
    }
    return modExp_int(a,111,2008);
}    
int main()
{
    printf("%d\n",modExp2008());
    printf("%d\n",modExp2008v2());    
    system("pause");
}