hdu 4002 Find the maximum 欧拉函数 The 36th ACM/ICPC Asia Regional Dalian Site
这道题其实只要掌握欧拉函数的定义就可以做出来,只要想到了在Java的大数下就是水题;
import java.math.BigInteger; import java.util.Scanner; public class Main { static int maxn = 1001; static boolean[] flag = new boolean[maxn]; static int[] p = new int[maxn]; static BigInteger[] ans = new BigInteger[maxn]; static int t = 1; public static void make_map() { for (int i = 0; i < maxn; i++) flag[i] = true; for (int i = 2; i < maxn; i++) { if (flag[i] == true) { p[t++] = i; for (int j = 2; i * j < maxn; j++) { flag[i * j] = false; } } } ans[0] = BigInteger.valueOf(1); for (int i = 1; i < t; i++) { ans[i] = ans[i - 1].multiply(BigInteger.valueOf(p[i])); } } public static void main(String[] args) { make_map(); Scanner in = new Scanner(System.in); int time = in.nextInt(); while (time > 0) { time--; BigInteger n = in.nextBigInteger(); int i; for (i = 1; i < t; i++) { if (ans[i].compareTo(n) > 0) { i--; break; } if (ans[i].compareTo(n) == 0) { break; } } System.out.println(ans[i]); } } }