【题解】CF45G Prime Problem

【题解】CF45G Prime Problem

哥德巴赫板子题?

\(\frac{n(n+1)}{2}\)若是质数,则不需要分了。

上式 若是奇数,那么拆成2和另一个数。

上式 若是偶数吗,直接\(O(n)\)枚举。

加上暴力判质数,复杂度\(O(n\sqrt{n})\)

没写,蒯别人的吧

//老写不对 交个题解看题解对不对
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<bitset>
#include<vector>
#include<map>
#include<ctime>
#include<cstdlib>
#include<set>
#include<bitset>
#include<stack>
#include<list>
#include<cmath>
using namespace std;
#define RP(t,a,b) for(register int (t)=(a),edd_=(b);t<=edd_;++t)
#define DRP(t,a,b) for(register int (t)=(a),edd_=(b);t>=edd_;--t)
#define ERP(t,a) for(int t=head[a];t;t=e[t].nx)
#define Max(a,b) ((a)<(b)?(b):(a))
#define Min(a,b) ((a)<(b)?(a):(b))
#define TMP template<class ccf>
#define lef L,R,l,mid,pos<<1
#define rgt L,R,mid+1,r,pos<<1|1
#define midd register int mid=(l+r)>>1
#define chek if(R<l||r<L)return
#define all 1,n,1
#define pushup(x) seg[(x)]=seg[(x)<<1]+seg[(x)<<1|1]
typedef long long ll;
TMP inline ccf qr(ccf k){
    char c=getchar();
    ccf x=0;
    int q=1;
    while(c<48||c>57)
    q=c==45?-1:q,c=getchar();
    while(c>=48&&c<=57)
    x=x*10+c-48,c=getchar();
    if(q==-1)
    x=-x;
    return x;
}
const int _=6005;
inline int read(){
    return qr(1);
}
int n,ans[_];
void Print(){
    for(int i=1;i<=n;++i)
        printf("%d ",ans[i]);
    puts("");
}
bool check(int x){
    int q=sqrt(x);
    for(int i=2;i<=q;++i)
        if(!(x%i))return 0;
    return 1;
}
int main(){
    n=read();
    int m=(n+1)*n/2;
    for(int i=1;i<=n;++i)ans[i]=1;
    if(check(m)){Print();return 0;}
    if(m&1&&!check(m-2))ans[3]=3,m-=3;
    for(int i=2;i<=n;++i)
        if(check(i)&&check(m-i))
        {ans[i]=2;break;}
    Print();
    return 0;
}

posted @ 2019-01-29 10:45  谁是鸽王  阅读(432)  评论(0编辑  收藏  举报