☰
递归算法(二)
2026/11/6 3:40:42 网站建设 项目流程

一、【模板】快速幂Ⅰ ‖ 模小整数

import java.util.Scanner; public class Main { public static long powMod(long a, long b, long p) { long res = 1; a = a % p; while (b > 0) { if (b % 2 == 1) { res = res * a % p; } a = a * a % p; b = b / 2; } return res % p; // 关键:最后再取一次模! } public static void main(String[] args) { Scanner in = new Scanner(System.in); int T = in.nextInt(); while (T-- > 0) { long a = in.nextLong(); long b = in.nextLong(); long p = in.nextLong(); System.out.println(powMod(a, b, p)); } } }

运行结果

二、【模板】分数取模

import java.util.Scanner; public class Main { static final long MOD = 1000000007L; public static long powMod(long a, long b, long p) { long res = 1; a = a % p; while (b > 0) { if (b % 2 == 1) { res = res * a % p; } a = a * a % p; b /= 2; } return res % p; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt(); while (t-- > 0) { long a = in.nextLong(); long b = in.nextLong(); long invB = powMod(b, MOD - 2, MOD); long ans = a % MOD * invB % MOD; // 处理负数,转为正模 if (ans < 0) ans += MOD; System.out.println(ans); } } }

运行结果

三、子数列求积

import java.util.Scanner; public class Main { static final long MOD = 1000000007L; public static long powMod(long a, long b, long p) { long res = 1; a = a % p; while (b > 0) { if (b % 2 == 1) { res = res * a % p; } a = a * a % p; b /= 2; } return res % p; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int q = in.nextInt(); long[] pre = new long[n + 1]; pre[0] = 1; for (int i = 1; i <= n; i++) { long x = in.nextLong(); pre[i] = pre[i - 1] * x % MOD; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < q; i++) { int l = in.nextInt(); int r = in.nextInt(); long inv = powMod(pre[l - 1], MOD - 2, MOD); long ans = pre[r] * inv % MOD; sb.append(ans).append(" "); } System.out.println(sb.toString().trim()); } }

运行结果

四、好多次方

import java.util.Scanner; public class Main { static final long MOD = 1000000007L; static final long PHI = MOD - 1; // 1000000006 public static long powMod(long a, long b, long p) { long res = 1; a = a % p; while (b > 0) { if (b % 2 == 1) { res = res * a % p; } a = a * a % p; b /= 2; } return res % p; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int T = in.nextInt(); while (T-- > 0) { long a = in.nextLong(); long b = in.nextLong(); long c = in.nextLong(); long exp = powMod(b, c, PHI); long ans = powMod(a, exp, MOD); System.out.println(ans); } } }

运行结果

五、放苹果

import java.util.Scanner; public class Main { public static int dfs(int m, int n) { if (m == 0) return 1; if (n == 1) return 1; if (n > m) return dfs(m, m); return dfs(m, n - 1) + dfs(m - n, n); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); System.out.println(dfs(m, n)); } }

运行结果

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询