目录
题目
思路
代码
题目
思路
每个小朋友移动一次的位置为,移动 q 次的位置则为。那么题目要求移动 ,最后的位置为 。
但 的范围是,而总的移动次数是 。时间复杂度是在,因此是一定不能硬算的,肯定会超时。那么该如何快速求解 ,可以发现这是一个非常经典的求(即), 我们可以使用快速幂求解此类问题,时间复杂度可以降到 。 快速幂(求解原理+例题)-CSDN博客。
有 ,
因此我们先求出 的结果,再带入公式 ,就可以求出结果。
代码
n的取值范围在10^6,两个10^6 以内的数相乘可以达到 10^12,会爆int,因此需要long类型。
import java.util.*;
class Main{
static long n,m,k,x;
public static void main(String[] args){
Scanner in = new Scanner(System.in);
n = in.nextLong();
m = in.nextLong();
k = in.nextLong();
x = in.nextLong();
qmi(10,k,n);
}
public static void qmi(long a,long k,long b){
long res = 1 % p; // 不乏有出题人将n设置为1
while(k!=0){
if((k&1)==1) {
res = res*a%n;
}
k = k>>1;
a = a*a%n;
}
System.out.println((x+res*m)%n);
}
}