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]);
		}
	}
}

 

posted on 2011-09-07 20:22  _Clarence  阅读(139)  评论(0编辑  收藏  举报

导航