結果

問題 No.847 Divisors of Power
ユーザー ks2mks2m
提出日時 2019-07-05 22:05:15
言語 Java
(openjdk 23)
結果
AC  
実行時間 265 ms / 2,000 ms
コード長 1,450 bytes
コンパイル時間 2,410 ms
コンパイル使用メモリ 79,360 KB
実行使用メモリ 51,980 KB
最終ジャッジ日時 2024-10-06 21:45:22
合計ジャッジ時間 6,970 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int k = sc.nextInt();
		int m = sc.nextInt();
		sc.close();

		if (n == 1) {
			System.out.println(1);
			return;
		}

		Map<Integer, Long> soinsu = bunkai(n);
		Integer[] keys = soinsu.keySet().toArray(new Integer[0]);
		Long[] vals = soinsu.values().toArray(new Long[0]);
		for (int i = 0; i < vals.length; i++) {
			vals[i] *= k;
		}

		Set<Long> set = new HashSet<Long>();
		set.add(1L);
		for (int i = 0; i < keys.length; i++) {
			Long[] o = set.toArray(new Long[0]);
			for (int j = 0; j < o.length; j++) {
				long x = m / o[j];
				long y = 1;
				for (int j2 = 0; j2 < vals[i]; j2++) {
					y *= keys[i];
					if (y <= x) {
						set.add(y * o[j]);
					} else {
						break;
					}
				}
			}
		}
		System.out.println(set.size());
	}

	static Map<Integer, Long> bunkai(int n) {
		Map<Integer, Long> soinsu = new HashMap<Integer, Long>();
		int end = (int) Math.sqrt(n);
		int d = 2;
		while (n > 1) {
			if (n % d == 0) {
				n /= d;
				if (soinsu.containsKey(d)) {
					soinsu.put(d, soinsu.get(d) + 1);
				} else {
					soinsu.put(d, 1L);
				}
				end = (int) Math.sqrt(n);
			} else {
				if (d > end) {
					d = n - 1;
				}
				d++;
			}
		}
		return soinsu;
	}
}
0