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
AC × 40
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