HDUOJ 6467 简单数学题
Problem Description
已知
求 F(n) mod 1000000007
Input
多组输入,每组输入占一行,包含一个整数n(1 <= n <= 1e18)。
数据不超过300000组。
Output
对于每组输入,输出一行,包括一个数代表答案。
Sample Input
5
100
Sample Output
129
660756544
在这里用亲身经历告诫各位小伙伴们,这种大数据的题目一定要用scanf!这种大数据的题目一定要用scanf!这种大数据的题目一定要用scanf!因为这个超时,到最后也没发现问题,一直没做出来,实属可惜。诶,规律比较简单,即F(n)=(n-1)*2^n+1
AC代码如下:
#include<cstdio>
typedef long long ll;
ll kpow(int a, ll b) //快速幂模板
{
ll ans = 1, base = a;
while (b != 0)
{
if (b & 1 != 0)
ans =ans*base % 1000000007;
base =base*base % 1000000007;
b >>= 1;
}
return ans % 1000000007;
}
int main()
{
ll n;
while (scanf("%lld", &n)!=EOF)
{
ll m = (n - 1) % 1000000007;
printf("%lld\n", m * poww(2, n) % 1000000007 + 1);
}
}