結果
問題 |
No.458 異なる素数の和
|
ユーザー |
![]() |
提出日時 | 2025-07-27 12:36:11 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,197 bytes |
コンパイル時間 | 1,537 ms |
コンパイル使用メモリ | 163,276 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-07-27 12:36:15 |
合計ジャッジ時間 | 2,654 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 WA * 9 |
ソースコード
#include<bits/stdc++.h> using namespace std; int n; bool vis[200005]; int prime[200005],sum[200005],m; void init(int n){ vis[0]=vis[1]=1; for(int i=2;i*i<=n;i++){ if(!vis[i]){ for(int j=i*i;j<=n;j+=i){ vis[j]=1; } prime[m++]=i; } } for(int i=0;i<m;i++){ if(sum[i+1]+prime[i]>100000){ break; } sum[i+1]=sum[i]+prime[i]; } } int main(){ // freopen("prime.in","r",stdin); // freopen("prime.out","w",stdout); int n; cin>>n; init(100000); if(n<2){ cout<<-1<<endl; return 0; } int tmp=0; // cout<<m<<endl; for(int i=0;i<=m;i++){ // cout<<sum[i]<<endl; if(sum[i]<=n){ tmp=i; continue; } break; } if(tmp==0){ cout<<-1<<endl; return 0; } int res=-1; for(int k=tmp;k>=max(1,tmp-2);k--){ int delta=n-sum[k]; if(delta==0){ res=k; break; } bool flg=false; for(int i=0;i<k;i++){ int tmp=prime[i]+delta; if(tmp<=1){ continue; } if(tmp>=300000){ continue; } if(!vis[tmp] && tmp>prime[k-1]){ res=k; flg=1; break; } } if(flg){ break; } if(k<2){ continue; } if(!(delta&1)){ if(k<3){ continue; } bool flg=0; for(int i=1;i<k;i++){ for(int j=i+1;j<k;j++){ int a=prime[i]; int b=prime[j]; int t=a+b+delta; int tt=prime[k-1]+1; if(t<2*tt){ continue; } bool flg2=false; for(int p=tt;p<=t/2;p++){ if(p>300000){ break; } int q=t-p; if(q>300000){ continue; } if(!vis[p] && !vis[q]){ flg2=1; break; } } if(flg2){ res=k; flg=1; break; } } if(flg){ break; } } if(flg){ break; } }else{ bool flg=false; for(int i=1;i<k;i++){ int a=2; int b=prime[i]; int t=a+b+delta; int tt=prime[k-1]+1; if(t<2*tt){ continue; } bool flg2=false; for(int p=tt;p<=t/2;p++){ if(p>300000){ break; } int q=t-p; if(q>300000){ continue; } if(!vis[p] && !vis[q]){ flg2=1; break; } } if(flg2){ res=k; flg=1; break; } } if(flg){ break; } } } cout<<res<<endl; return 0; }