結果
| 問題 |
No.889 素数!
|
| コンテスト | |
| ユーザー |
SDESTINY_kpr
|
| 提出日時 | 2020-03-12 23:16:58 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 2,039 bytes |
| コンパイル時間 | 1,892 ms |
| コンパイル使用メモリ | 172,056 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-20 09:34:40 |
| 合計ジャッジ時間 | 3,413 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 61 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<int,int>;
#define rep(i,n) for(int i=0;i<n;i++)
const ll mod = ll(1e9) + 7;
const int INF = 1<<29;
struct Prime{
vector<ll> num;
// 初期化:エラストテネスの篩
Prime(ll a){
num = vector<ll>(a+1);
num[0] = num[1] = -1;
for (int i=2;i<=a;i++){
if (!num[i]){
num[i] = i;
for (int j=i*i;j<=a;j+=i){
if (!num[j]) num[j] = i;
}
}
}
}
// 素数判定
bool is_prime(ll a){
if (num[a]==a) return true;
else return false;
}
// 素数列挙
vector<ll> prime_num(ll a){
vector<ll> res;
for (int i=2;i<=a;i++){
if (num[i]==i) res.push_back(i);
}
return res;
}
// 素因数分解
vector<ll> prime_fact(ll a){
vector<ll> fact;
while (num[a]!=a){
fact.push_back(num[a]);
a /= num[a];
}
fact.push_back(a);
return fact;
}
};
int main(){
int n;
cin >> n;
if (n==0 || n==1) cout << n << endl;
else{
for (int i=2;i<=n;i++){
Prime p(n);
if (p.is_prime(n)){
cout << "Sosu!" << endl;
return 0;
}
}
int j = 2;
while (j*j<=n){
if (j*j==n){
cout << "Heihosu!" << endl;
return 0;
}
j++;
}
j = 2;
while(j*j*j<=n){
if (j*j*j==n){
cout << "Ripposu!" << endl;
return 0;
}
j++;
}
vector<int> kan;
for (int i=1;i<n;i++){
if (n%i==0) kan.push_back(i);
}
int res = 0;
for (auto x:kan) res += x;
if (res==n){
cout << "Kanzensu!" << endl;
return 0;
}
cout << n << endl;
}
return 0;
}
SDESTINY_kpr