Submission #24494


Source Code Expand

module main;

import std.stdio;
import std.array;
import std.string;
import std.conv;
//import std.math;
import std.algorithm;
import std.range;
import std.typetuple;
import std.functional;
const mod = 10_0000_0007;


void main()
{
    solve_D();
}

void solve_D()
{
    auto buf = readln().strip().split();
    int n = buf[0].to!int();
    int m = buf[1].to!int();
    if (n < 0)
    {
        n = -n;
    }
    int[int] power;
    foreach (prime; known_primes())
    {
        if (n % prime == 0)
        {
            power[prime] = 0;
            while (n % prime == 0)
            {
                power[prime] += 1;
                n /= prime;
            }
        }
    }
    // (いま) n = 1 なら (もとの) n の素因数は小さいものばかり。
    // そうでない場合は大きい素因数だけの積になっているが、それは単一の素数にほかならない。
    if (1 < n)
    {
        power[n] += 1;
    }
    assert(n); // check
    // 符号の処理: 最後以外は自由に選べる。
    ulong ret = 1;
    foreach (i; 1..m)
    {
        ret *= 2;
        ret %= mod;
    }
    // ここがメイン。
    foreach (p, e; power)
    {
        ret *= partition(e, m);
        ret %= mod;
    }
    writefln("%d", ret);
}

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;
            //            debug { writef("%d, ", i);}
        }
    }
    return ret;
}

int partition(int e, int n)
out (result)
{
    assert(0 <= result && result < mod);
}
body
{
    ulong[][] dp;//[n+1][e+1] 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 2466 Byte
Status AC
Exec Time 1299 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 295 ms 9852 KB
00_max2.txt AC 390 ms 16128 KB
00_max3.txt AC 1299 ms 28412 KB
00_min.txt AC 24 ms 896 KB
00_sample_01.txt AC 23 ms 916 KB
00_sample_02.txt AC 23 ms 908 KB
00_sample_03.txt AC 23 ms 908 KB
00_sample_04.txt AC 23 ms 912 KB
01_rnd_00.txt AC 65 ms 3824 KB
01_rnd_01.txt AC 30 ms 1916 KB
01_rnd_02.txt AC 27 ms 1268 KB
01_rnd_03.txt AC 53 ms 3704 KB
01_rnd_04.txt AC 58 ms 3428 KB
01_rnd_05.txt AC 71 ms 3956 KB
01_rnd_06.txt AC 33 ms 2420 KB
01_rnd_07.txt AC 37 ms 2560 KB
01_rnd_08.txt AC 172 ms 9852 KB
01_rnd_09.txt AC 57 ms 4476 KB
01_rnd_10.txt AC 58 ms 4724 KB
01_rnd_11.txt AC 109 ms 5112 KB
01_rnd_12.txt AC 74 ms 6016 KB
01_rnd_13.txt AC 74 ms 3964 KB
01_rnd_14.txt AC 67 ms 4340 KB
01_rnd_15.txt AC 33 ms 2444 KB
01_rnd_16.txt AC 119 ms 5108 KB
01_rnd_17.txt AC 105 ms 6656 KB
01_rnd_18.txt AC 104 ms 5492 KB
01_rnd_19.txt AC 40 ms 2432 KB
01_rnd_20.txt AC 41 ms 3328 KB
01_rnd_21.txt AC 63 ms 4224 KB
01_rnd_22.txt AC 40 ms 2544 KB
01_rnd_23.txt AC 79 ms 6776 KB
01_rnd_24.txt AC 67 ms 5488 KB
01_rnd_25.txt AC 97 ms 6264 KB
01_rnd_26.txt AC 84 ms 4608 KB
01_rnd_27.txt AC 48 ms 3844 KB
01_rnd_28.txt AC 86 ms 4340 KB
01_rnd_29.txt AC 163 ms 9484 KB
04_primes_01.txt AC 56 ms 5624 KB
04_primes_02.txt AC 56 ms 5628 KB