目录
题目
思路
代码
题目
思路
每个小朋友移动一次的位置为,移动 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设置为1while(k!=0){if((k&1)==1) {res = res*a%n;}k = k>>1;a = a*a%n;}System.out.println((x+res*m)%n);}
}