题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4704
题意:给一个整数,求它的分解方式的总和,找规律可得是2的n-1次幂%10^9+7。注意一下这里n是高精度数。
所以做个小处理,把十进制数每一位分开处理,2^345=(2^100)^3 * (2^10)^4 * (2^1)^5;
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#define mod 1000000007
#define MAX 100000+5
#define ll long long
using namespace std;
char a[MAX];
long long in[MAX];
ll kuai(ll x,ll y)//快速幂
{
ll ans=1;
while(y>0)
{
if(y%2==1)
{
ans=(x%mod*ans)%mod;
}
x=((x%mod)*(x%mod))%mod;
y>>=1;
}
return ans%mod;
}
void init()
{
in[0]=2;
for(int i=1;i<MAX;i++)
{
in[i] = kuai(in[i-1],10);//预处理2的10、100、1000次方...
}
}
int main()
{
init();
int i,len;
ll ans;
while(scanf("%s",a)!=EOF)
{
len=strlen(a);
for (i = len-1; i>=0; i--)//得到n-1
{
if(a[i]=='0'){a[i]='9';}
else break;
}a[i]--;
ans = 1;
for(i=len-1;i>=0;i--)//分开求积
{
ans=(ans*kuai(in[len-i-1],a[i]-'0'))%mod;
}
printf("%lld\n",ans);
}
return 0;
}