Codeforces Iterated Linear Function

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class Iteratedlinear {

private static long MOD=(long) (1e9+7);
public static void main(String[] args)
{
// TODO Auto-generated method stub
MyScanneril sc=new MyScanneril();
long a=sc.nextLong();
long b=sc.nextLong();
long n=sc.nextLong();
long x=sc.nextLong();


if(a!=1){
long result=(fastexp(a,n)*x)%MOD;
//System.out.println(result);
long res=(fastexp(a,n)-1)*fastexp((a-1),MOD-2);
res=res%MOD;
res=(res*b)%MOD;

result=(result+res)%MOD;

System.out.println(result);
}
else
{
long result=((n%MOD)*b)%MOD;
result=(result+x)%MOD;
System.out.println(result);
}

}
public static long fastexp(long base,long exp)
{
long result=1;
while(exp>0)
{
if(exp%2==1)
result=(result*base)%MOD;
base=(base*base)%MOD;
exp=exp/2;

}
return result;
}

}
class MyScanneril
{
BufferedReader br;
StringTokenizer st;
MyScanneril()
{
br=new BufferedReader(new InputStreamReader(System.in));
}
String next()
{

while(st==null || !st.hasMoreTokens())
{
try
{
st=new StringTokenizer(br.readLine());
}
catch(Exception e)
{
e.printStackTrace();
}
}
return st.nextToken();

}
int nextInt()
{
return Integer.parseInt(next());
}
long nextLong()
{
return Long.parseLong(next());
}
double nextDouble()
{
return Double.parseDouble(next());
}
String nextLine()
{
String str="";
try
{
str=br.readLine();
}
catch(Exception e)
{
e.printStackTrace();
}
return str;

}
}

Comments

Popular Posts