結果
| 問題 |
No.826 連絡網
|
| コンテスト | |
| ユーザー |
kamiyomokikanu
|
| 提出日時 | 2019-05-04 01:02:31 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,197 bytes |
| コンパイル時間 | 423 ms |
| コンパイル使用メモリ | 58,932 KB |
| 実行使用メモリ | 7,552 KB |
| 最終ジャッジ日時 | 2025-01-01 19:55:50 |
| 合計ジャッジ時間 | 1,678 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 1 |
| other | AC * 29 WA * 1 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:38:17: warning: ‘pri’ may be used uninitialized [-Wmaybe-uninitialized]
38 | if(pri[P]==PRIME_NUM && P*2<N){
| ~~~~~^
main.cpp:20:13: note: ‘pri’ declared here
20 | int pri[NMAX+1];
| ^~~
ソースコード
//Y街には家1~家Nがあり、一人ずつ住んでいる。
//青木君は家Pに住む
//※互いに素---最大公約数が1
//家1~家N同士は繋がっているが、互いに素な家同士は繋がっていない。
//家の数Nと、青木君Pが与えられるので、青木君と繋がってる数を考える
//素数以外はなんやかんやつながる。素数は*2がN以内にあればつながる。で考える。
#include<iostream>
#define NMAX (1000000)
//PRIME_NUM 素数
//DEVIS_NUM not素数
#define PRIME_NUM 0
#define DEVIS_NUM 1
int main(void){
int N,P;
int pri[NMAX+1];
std::cin>>N>>P;
//篩で素数を算出。
for(int i=0;i<=N;i++){
pri[i]=PRIME_NUM;
}
for(int i=2;i<=N;i++){
if(pri[i]==PRIME_NUM){
for(int j=i*2;j<=N;j+=i){
pri[j]=DEVIS_NUM;
}
}
}
//Pが素数でP*2<Nなら、どことも繋げない。
if(pri[P]==PRIME_NUM && P*2<N){
std::cout<<"1"<<std::endl;
return 0;
}
//素数に関して考慮しながら数える
int ans=0;
for(int i=2;i<=N;i++){
//素数かつ、*2がN以上ならカウントしない
if(!(pri[i]==PRIME_NUM && i*2>N)){
ans++;
}
}
std::cout<<ans<<std::endl;
return 0;
}
kamiyomokikanu