codeforces_678D. Iterated Linear Function(快速幂)
2016-07-02 16:43
417 查看
D. Iterated Linear Function
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Consider a linear function f(x) = Ax + B. Let's define g(0)(x) = x and g(n)(x) = f(g(n - 1)(x)) for n > 0.
For the given integer values A,B, n and x find
the value of g(n)(x) modulo 109 + 7.
Input
The only line contains four integers A, B, n and x (1 ≤ A, B, x ≤ 109, 1 ≤ n ≤ 1018)
— the parameters from the problem statement.
Note that the given value n can be too large, so you should use 64-bit
integer type to store it. In C++ you can use the long longinteger
type and in Java you can use long integer type.
Output
Print the only integer s — the value g(n)(x) modulo 109 + 7.
Examples
input
output
input
output
input
output
快速幂求等比数列之和就行,不过取模要注意一下,除法需要用到逆元。
a^(mod) % mod = a
a^(mod-1) % mod = 1
a^(mod-2) * a %mod = 1
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <stack>
#include <bitset>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <algorithm>
#define Si(a) scanf("%d",&a)
#define Sl(a) scanf("%lld",&a)
#define Sd(a) scanf("%lf",&a)
#define Ss(a) scanf("%s",a)
#define Pi(a) printf("%d\n",(a))
#define Pl(a) printf("%lld\n",(a))
#define Pd(a) printf("%lf\n",(a))
#define Ps(a) printf("%s\n",(a))
#define W(a) while(a--)
#define mem(a,b) memset(a,(b),sizeof(a))
#define FOP freopen("data.txt","r",stdin)
#define inf 0x3f3f3f3f
#define maxn 1000010
#define mod 1000000007#define PI acos(-1.0)
#define LL long long
using namespace std;
LL fastpow(LL x,LL n)
{
LL ans=1;
while(n)
{
if(n&1)ans=ans*x%mod;
x=x*x%mod;
n>>=1;
}
return ans;
}
int main()
{
LL a,b,x,ans;
LL n;
scanf("%lld%lld%lld%lld",&a,&b,&n,&x);
if(a==1)
{
ans=((n%mod*b)%mod+x)%mod;
}
else
{
LL an=fastpow(a,n);
ans=(an-1+mod)%mod;
ans=ans*fastpow(a-1,mod-2)%mod*b%mod;
ans=(ans%mod+an*x%mod)%mod;
}
Pl(ans%mod);
return 0;
}
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Consider a linear function f(x) = Ax + B. Let's define g(0)(x) = x and g(n)(x) = f(g(n - 1)(x)) for n > 0.
For the given integer values A,B, n and x find
the value of g(n)(x) modulo 109 + 7.
Input
The only line contains four integers A, B, n and x (1 ≤ A, B, x ≤ 109, 1 ≤ n ≤ 1018)
— the parameters from the problem statement.
Note that the given value n can be too large, so you should use 64-bit
integer type to store it. In C++ you can use the long longinteger
type and in Java you can use long integer type.
Output
Print the only integer s — the value g(n)(x) modulo 109 + 7.
Examples
input
3 4 1 1
output
7
input
3 4 2 1
output
25
input
3 4 3 1
output
79
快速幂求等比数列之和就行,不过取模要注意一下,除法需要用到逆元。
a^(mod) % mod = a
a^(mod-1) % mod = 1
a^(mod-2) * a %mod = 1
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <stack>
#include <bitset>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <algorithm>
#define Si(a) scanf("%d",&a)
#define Sl(a) scanf("%lld",&a)
#define Sd(a) scanf("%lf",&a)
#define Ss(a) scanf("%s",a)
#define Pi(a) printf("%d\n",(a))
#define Pl(a) printf("%lld\n",(a))
#define Pd(a) printf("%lf\n",(a))
#define Ps(a) printf("%s\n",(a))
#define W(a) while(a--)
#define mem(a,b) memset(a,(b),sizeof(a))
#define FOP freopen("data.txt","r",stdin)
#define inf 0x3f3f3f3f
#define maxn 1000010
#define mod 1000000007#define PI acos(-1.0)
#define LL long long
using namespace std;
LL fastpow(LL x,LL n)
{
LL ans=1;
while(n)
{
if(n&1)ans=ans*x%mod;
x=x*x%mod;
n>>=1;
}
return ans;
}
int main()
{
LL a,b,x,ans;
LL n;
scanf("%lld%lld%lld%lld",&a,&b,&n,&x);
if(a==1)
{
ans=((n%mod*b)%mod+x)%mod;
}
else
{
LL an=fastpow(a,n);
ans=(an-1+mod)%mod;
ans=ans*fastpow(a-1,mod-2)%mod*b%mod;
ans=(ans%mod+an*x%mod)%mod;
}
Pl(ans%mod);
return 0;
}
相关文章推荐
- 用Python将多标签数据存入caffe使用的HDF5&LMDB格式
- 如何利用记事本编写并运行一个java程序
- 调用系统InstalledAppDetails界面
- UVA 10780 Again Prime? No Time. [质因子分解]【数论】
- QT去掉CONSOLE
- 字符与字节的区别
- Hexo + Github搭建个人博客
- reactor与proactor模式
- WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-
- Mybatis动态SQL单一基础类型参数用if标签注意事项
- LADP
- centos下安装配置vsftpd服务
- 【阅读】《黑客与画家》系列02-小团体=可测量性(节选)
- react教程
- shell包含所有解压缩的函数
- leetcode342. Power of Four
- WebSocket握手协议
- RemoteView基础知识(一)
- Hive的一些常识性技巧
- C语言sizeof和strlen