Submission #24538
Source Code Expand
module main; import std.stdio; import std.conv; import std.range; import std.string; const mod = 10_0000_0007; void main() { auto buf = readln().strip().split(); int n = buf[0].to!int(); if (n < 0) { n = -n; } int m = buf[1].to!int(); int[int] power; // nの素因数 p の指数 e (> 0) foreach (prime; known_primes()) { while (n % prime == 0) { power[prime] += 1; n /= prime; } } // (いま) n = 1 なら (もとの) n の素因数は小さいものばかり。 // そうでない場合は大きい素因数だけの積になっているが、それは単一の素数にほかならない。 if (1 < n) { power[n] += 1; } // 符号の処理: 最後以外は自由に選べる。 ulong ret = 1; foreach (i; 1..m) { ret *= 2; ret %= mod; } // メイン。素因数ごとに指数を割り振る。 foreach (p, e; power) { ret *= partition(e, m); ret %= mod; } writefln("%d", ret); } /// '既知' の素数リスト: 今回は入力が 10^9 以下なので, 10^(9/2) までの素数を求めておけばよい。 int[] known_primes() { const M = 32768; bool[M] not_prime; not_prime[0] = true; not_prime[1] = true; foreach (i; 2..200) { if (not_prime[i]) { continue; } foreach (j; iota(i+i, M, i)) { not_prime[j] = true; } } int[] ret; foreach (i; 2..M) { if (!not_prime[i]) { ret ~= i; } } return ret; } /// 区別できないe個のボールを区別できるn個の箱へ入れる方法の総数 (mod 10_0000_0007) int partition(int e, int n) { // dp[i][j] = i箱までに合計j個を入れる方法の総数 // 漸化式: dp[i][j] = Σdp[i-1][j以下] ulong[][] dp; dp.length = n+1; foreach (i; 0..(n+1)) { dp[i].length = e+1; } dp[0][0] = 1; foreach(i; 0..n) { foreach (j; 0..(e+1)) { foreach (jj; 0..(j+1)) { dp[i+1][j] += dp[i][jj]; if (mod <= dp[i+1][j]) { dp[i+1][j] -= mod; } } } } return cast(int)(dp[n][e]); }
Submission Info
Submission Time | |
---|---|
Task | D - 表現の自由 ( Freedom of expression ) |
User | majiang |
Language | D (DMD 2.060) |
Score | 100 |
Code Size | 2482 Byte |
Status | AC |
Exec Time | 1306 ms |
Memory | 28412 KB |
Judge Result
Set Name | All | ||
---|---|---|---|
Score / Max Score | 100 / 100 | ||
Status |
|
Set Name | Test Cases |
---|---|
All | 00_max.txt, 00_max2.txt, 00_max3.txt, 00_min.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 01_rnd_10.txt, 01_rnd_11.txt, 01_rnd_12.txt, 01_rnd_13.txt, 01_rnd_14.txt, 01_rnd_15.txt, 01_rnd_16.txt, 01_rnd_17.txt, 01_rnd_18.txt, 01_rnd_19.txt, 01_rnd_20.txt, 01_rnd_21.txt, 01_rnd_22.txt, 01_rnd_23.txt, 01_rnd_24.txt, 01_rnd_25.txt, 01_rnd_26.txt, 01_rnd_27.txt, 01_rnd_28.txt, 01_rnd_29.txt, 04_primes_01.txt, 04_primes_02.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_max.txt | AC | 296 ms | 9852 KB |
00_max2.txt | AC | 392 ms | 16132 KB |
00_max3.txt | AC | 1306 ms | 28412 KB |
00_min.txt | AC | 22 ms | 892 KB |
00_sample_01.txt | AC | 22 ms | 888 KB |
00_sample_02.txt | AC | 22 ms | 912 KB |
00_sample_03.txt | AC | 22 ms | 916 KB |
00_sample_04.txt | AC | 23 ms | 896 KB |
01_rnd_00.txt | AC | 67 ms | 3832 KB |
01_rnd_01.txt | AC | 29 ms | 1908 KB |
01_rnd_02.txt | AC | 25 ms | 1280 KB |
01_rnd_03.txt | AC | 53 ms | 3712 KB |
01_rnd_04.txt | AC | 57 ms | 3456 KB |
01_rnd_05.txt | AC | 71 ms | 3972 KB |
01_rnd_06.txt | AC | 34 ms | 2420 KB |
01_rnd_07.txt | AC | 37 ms | 2552 KB |
01_rnd_08.txt | AC | 171 ms | 9732 KB |
01_rnd_09.txt | AC | 55 ms | 4468 KB |
01_rnd_10.txt | AC | 58 ms | 4732 KB |
01_rnd_11.txt | AC | 110 ms | 5120 KB |
01_rnd_12.txt | AC | 74 ms | 6016 KB |
01_rnd_13.txt | AC | 73 ms | 3968 KB |
01_rnd_14.txt | AC | 66 ms | 4348 KB |
01_rnd_15.txt | AC | 34 ms | 2408 KB |
01_rnd_16.txt | AC | 120 ms | 5112 KB |
01_rnd_17.txt | AC | 106 ms | 6652 KB |
01_rnd_18.txt | AC | 104 ms | 5504 KB |
01_rnd_19.txt | AC | 39 ms | 2432 KB |
01_rnd_20.txt | AC | 40 ms | 3224 KB |
01_rnd_21.txt | AC | 62 ms | 4212 KB |
01_rnd_22.txt | AC | 41 ms | 2416 KB |
01_rnd_23.txt | AC | 78 ms | 6780 KB |
01_rnd_24.txt | AC | 68 ms | 5500 KB |
01_rnd_25.txt | AC | 99 ms | 6260 KB |
01_rnd_26.txt | AC | 84 ms | 4604 KB |
01_rnd_27.txt | AC | 47 ms | 3828 KB |
01_rnd_28.txt | AC | 85 ms | 4320 KB |
01_rnd_29.txt | AC | 165 ms | 9464 KB |
04_primes_01.txt | AC | 56 ms | 5632 KB |
04_primes_02.txt | AC | 56 ms | 5656 KB |