逆元 HDU5686 HDU 1576 java实现

package _012HDU5685;

//暴力解---超时
//import java.math.BigInteger;
//import java.util.Scanner;
//
//public class Main {
//	public static BigInteger MOD = new BigInteger("9973");
//	public static void main(String[] args) {
//		Scanner sc = new Scanner(System.in);
//		while(sc.hasNext()) {
//			int T = sc.nextInt();
//			sc.nextLine();
//			String s = sc.nextLine();
//			for (int i = 0; i < T; i++) {
//				BigInteger sum = new BigInteger("1");
//				int l = sc.nextInt();
//				int r = sc.nextInt();
//				for (int j = l; j <= r; j++) {//1-len
//					//H(s)=∏i≤len(s)i=1(Si−28) (mod 9973) 
//					//System.out.println(s.charAt(j-1));
//					sum = sum.multiply(new BigInteger(((int)s.charAt(j-1))-28+"")).mod(MOD);
//				}
//				System.out.println(sum.mod(MOD));
//			}
//		}
//	}
//}


import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		int mod = 9973;
		Scanner sc = new Scanner(System.in);
		int[] v = new int[9973];
		v[0]=v[1]=1;
		for (int i = 2; i < v.length; i++)v[i] = qpow(i,mod-2,mod);
		while(sc.hasNext()) {
			int T = sc.nextInt();
			sc.nextLine();
			String s = sc.nextLine();
			int len = s.length();
			int[] pre = new int[len+1];
			pre[0] = 1;
			for (int i = 1; i < pre.length; i++) pre[i] = (pre[i-1]*((int)s.charAt(i-1)-28))%mod;
			for (int i = 0; i < T; i++) {
				int n = sc.nextInt();
				int m = sc.nextInt();
				System.out.println((pre[m]*v[pre[n-1]])%mod);
			}
		}
	}
	private static int qpow(int i, int j, int mod) {
		//i^j%mod2  =  r^p
		int r = i;
		int p = j;
		int sum = 1;
		while(p!=0) {
			if(p%2==1) {
				sum=(sum*r)%mod;
				p--;
			}
			r = (r*r)%mod;
			p = p/2;	
		}
		return sum;
	}
}




HDU1576

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		int mod = 9973;
		for (int i = 0; i < T; i++) {
			int n = sc.nextInt()%mod;
			int B = sc.nextInt()%mod;
			int b_1 = qpow(B,mod-2,mod);
			System.out.println((n*b_1)%mod);	
		}
	}

	private static int qpow(int b, int i, int mod) {
		int r = b;
		int q = i;
		int sum = 1;
		while(q!=0) {
			if(q%2==1) {
				sum = (sum*r)%mod;
				q--;
			}
			r = (r*r)%mod;
			q = q/2;
		}
		return sum;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40674583/article/details/87887112