結果
| 問題 |
No.2896 Monotonic Prime Factors
|
| コンテスト | |
| ユーザー |
憩いの場
|
| 提出日時 | 2024-09-20 22:06:56 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 503 ms / 2,000 ms |
| コード長 | 1,728 bytes |
| コンパイル時間 | 4,326 ms |
| コンパイル使用メモリ | 250,956 KB |
| 最終ジャッジ日時 | 2025-02-24 10:12:33 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 18 |
ソースコード
#include<bits/stdc++.h>
#include<atcoder/all>
using namespace std;
using namespace atcoder;
#include<vector>
class CombinationMod
{
public :
CombinationMod() = default;
CombinationMod( int max_size, int mod ) : MAX_SIZE( max_size ),
MOD( mod ),
fac( max_size, 1 ),
finv( max_size, 1 ),
inv( max_size, 1 )
{
for ( int i = 2; i < MAX_SIZE; i++ )
{
fac[i] = fac[i - 1] * i % MOD;
inv[i] = MOD - inv[ MOD % i] * ( MOD / i ) % MOD;
finv[i] = finv[i - 1] * inv[i] % MOD;
}
}
long long calculateCombination( int n, int k )
{
if( n < k ) return 0;
if( n < 0 || k < 0 ) return 0;
return fac[n] * ( finv[k] * finv[n - k] % MOD ) % MOD;
}
int getMaxSize( void ) { return MAX_SIZE; }
int getMod( void ) { return MOD; }
private :
int MAX_SIZE, MOD;
std::vector<long long> fac;
std::vector<long long> finv;
std::vector<long long> inv;
};
int main( void )
{
CombinationMod com( 1800000, 998244353 );
int Q;
cin >> Q;
int cur = 0;
int A, B;
while( Q-- > 0 )
{
cin >> A >> B;
for( int i = 2; i * i <= A; i++ )
{
while( A % i == 0 )
{
A /= i;
cur++;
}
}
if( A != 1 ) cur++;
if( cur < B )
{
cout << 0 << endl;
}
else
{
cout << com.calculateCombination( cur - 1, B - 1 ) << endl;
}
}
return 0;
}
憩いの場