結果
問題 |
No.106 素数が嫌い!2
|
ユーザー |
|
提出日時 | 2025-03-13 10:53:35 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 44 ms / 5,000 ms |
コード長 | 878 bytes |
コンパイル時間 | 1,036 ms |
コンパイル使用メモリ | 74,988 KB |
実行使用メモリ | 11,848 KB |
最終ジャッジ日時 | 2025-03-13 10:53:38 |
合計ジャッジ時間 | 2,372 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:31:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 31 | scanf("%d%d",&n,&k); | ~~~~~^~~~~~~~~~~~~~
ソースコード
#include<iostream> #include<vector> #include<cassert> #define rep(i,n) for(i=0;i<(int)(n);i++) using namespace std; typedef long long ll; typedef unsigned long long ull; int n,k; vector<int> erato(const int MAX_X){ int i,j; vector<int> prime; vector<bool> isPrime(MAX_X+1,true); isPrime[0]=isPrime[1]=false; for(i=2;i<=MAX_X;i++){ if(isPrime[i]){ j=2*i; prime.push_back(i); while(j<=MAX_X){ isPrime[j]=false; j+=i; } } } return prime; } int main(){ int i,j; scanf("%d%d",&n,&k); vector<int> prime=erato(n),cnt_prime(n+1,0); rep(i,prime.size()){ j=prime[i]; while(j<=n){ cnt_prime[j]++; j+=prime[i]; } } j=0; rep(i,n+1)j+=cnt_prime[i]>=k; printf("%d\n",j); return 0; }