結果
| 問題 |
No.2379 Burnside's Theorem
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-07-14 21:23:05 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 10 ms / 2,000 ms |
| コード長 | 1,402 bytes |
| コンパイル時間 | 4,007 ms |
| コンパイル使用メモリ | 171,872 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-16 06:08:41 |
| 合計ジャッジ時間 | 4,714 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 20 |
ソースコード
import std;
void main () {
long N = readln.chomp.to!long;
solve(N);
}
void solve (long N) {
auto fac = Factors(N);
if (fac.factor.length <= 3) {
writeln("Yes");
} else {
writeln("No");
}
}
struct Factors {
long target;
long[] factor;
long[] pow;
bool is_prime () {
if (target <= 0) {
return false;
}
if (factor.length == 2 && pow[1] == 1) {
return true;
}
return false;
}
long[] combine_factor () {
if (target <= 0) {
return [];
}
long[] ret;
foreach (i, x; pow) {
foreach (k; 0..x) {
ret ~= factor[i];
}
}
return ret;
}
this (long target_) {
{ // check input
assert(0 < target_);
}
target = target_;
factor = [];
pow = [];
pow ~= 1;
factor ~= 1;
foreach (i; 2..target_) {
if (target_ < i*i) {
break;
}
if (target_ % i == 0) {
factor ~= i;
pow ~= 0;
while (target_ % i == 0) {
target_ /= i;
pow[$-1]++;
}
}
}
if (target_ != 1) {
factor ~= target_;
pow ~= 1;
}
}
}