結果
問題 | No.732 3PrimeCounting |
ユーザー |
![]() |
提出日時 | 2018-09-07 23:15:49 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 616 ms / 3,000 ms |
コード長 | 1,012 bytes |
コンパイル時間 | 1,549 ms |
コンパイル使用メモリ | 170,372 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-29 19:55:44 |
合計ジャッジ時間 | 10,289 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 89 |
ソースコード
#include <bits/stdc++.h> #define ll long long #define PB push_back #define FOR(i,a,b) for(int i=a;i<b;i++) using namespace std; //素数判定 bool pj(int n){ if(n==1) return false; int d=2; while(d*d<=n){ if(n%d==0)return false; d++; } return true; } int m[300000]; vector<int> v; int main(){ int n; cin>>n; memset(m,0,sizeof(m)); FOR(i,1,3*n+1) if(pj(i)) v.PB(i); v.PB(1e9); for(int i=0;v[i]<=n;i++){ for(int j=0;v[j]<=n;j++){ m[v[i]+v[j]]++; } } ll ans1=0,ans2=0; for(int i=0;v[i]<=3*n;i++){ for(int j=0;v[j]<=n;j++){ if(v[i]>v[j]){ ans1+=m[v[i]-v[j]]; } } } memset(m,0,sizeof(m)); for(int i=0;v[i]<=n;i++){ m[2*v[i]]++; } for(int i=0;v[i]<=3*n;i++){ for(int j=0;v[j]<=n;j++){ if(v[i]>v[j]){ ans2+=m[v[i]-v[j]]; } } } cout<<(ans1-ans2*3)/6<<endl; return 0; }