题意:将N拆分成1~N个数,求拆分方法的总数,则:再将其对取模。
但是数据达到了级。
费马小定理:当p是一个素数并且a和p互质时, %
#include <stdio.h>
#include <string.h>
#define MAX 100005
#define mod 1000000007
char s[MAX];
long long pow(long long a, long long b)
{
long long base = a, r = 1;
while (b != 0)
{
if (b & 1)
r = (r*base) % mod;
base = (base*base) % mod;
b /= 2;
}
return r % mod;
}
int main()
{
while (scanf("%s", s) != EOF)
{
int len = strlen(s);
long long num = 0;
for (int i = 0; i<len; i++)//大数取模
num = (num * 10 + (int)(s[i] - '0')) % (mod - 1);
if (num == 0)//说明num=mod-1
{
printf("%lld\n",pow(2, mod - 2));
}
else
{
num--;
printf("%lld\n", pow(2, num));
}
}
return 0;
}
好难。。。