计蒜客 转圈游戏 快速幂

题目地址

思路;

由于n个人围成一圈,所以可以想到要取模运算,有周期性。
按照题目要求可以得到公式 a n s = ( x + m ∗ 1 0 k ) m o d 10 ans = (x + m *10^k)mod10 ans=(x+m10k)mod10
但题目给的k过大,超出了数据范围,所以用快速幂即可。
快速幂也有二分的特性,复杂度是 O ( l o g b ) O(logb) O(logb)

import java.util.Scanner;

public class Main {
	static long n;
	static long pow(long a, long b) {
		
		long sum = 1;
		
		while(b > 0) {
			if((b & 1) == 1) {
				sum = a % n * a % n;
			}
			b >>= 1;
			a = a % n * a % n;
		}
		return sum;
	}
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		n = cin.nextLong();
		long m = cin.nextLong();
		long k = cin.nextLong();
		long x = cin.nextLong();
		System.out.println((x + m * pow(10, k) % n) % n);
	}
	
}

你可能感兴趣的:(快速幂)