結果
| 問題 | No.732 3PrimeCounting |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-09-17 16:39:07 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,013 bytes |
| 記録 | |
| コンパイル時間 | 1,621 ms |
| コンパイル使用メモリ | 172,616 KB |
| 実行使用メモリ | 10,752 KB |
| 最終ジャッジ日時 | 2024-07-18 07:45:57 |
| 合計ジャッジ時間 | 41,757 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 85 TLE * 3 -- * 1 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
vector<bool> isPrime(3 * n + 1,true);
for(int i = 2;i <= 3 * n;i++){
if(isPrime.at(i)){
for(int j = 2 * i;j <= 3 * n;j += i){
isPrime.at(j) = false;
}
}
}
vector <int> Primes;
for(int i = 3;i <= n;i++){
if(isPrime.at(i)){
Primes.push_back(i);
}
}
int size = Primes.size();
vector <int> GET(2 * Primes.back() + 1,0);
long long int ans = 0;
long long int minus = 0;
for(int i = 0;i < size - 1;i++){
int U = Primes.at(i);
for(int j = i + 1;j < size;j++){
int V = Primes.at(j);
GET.at(U + V)++;
if(isPrime.at(U + 2 * V)) minus++;
if(isPrime.at(2 * U + V)) minus++;
}
}
for(int i = 0;i < size;i++){
int U = Primes.at(i);
for(int j = 4; j <= 2 * Primes.back();j +=2){
if(isPrime.at(U + j) && GET.at(j) > 0){
ans += GET.at(j);
}
}
}
ans = (ans - minus) / 3;
cout << ans << endl;
return 0;
}