W3 school 菜鸟教程 我要自学网 信息学奥赛NOI 花哥的博客 不逼自己一把,怎知自己有多优秀——校长语录

1623:Sherlock and His Girlfriend

1623:Sherlock and His Girlfriend(原题链接)

【分析】

  这个题目初看我还以为题出错了,因为”一件珠宝的价格是另一件的质因子时,两件珠宝的颜色不同“,那意味着只要把数分两类就好:一类是质数,另一类是合数,各取一种颜色就搞定。有这么简单?但也想不出其他理解啊。报着试一试的心态,搞个筛选法选质数,居然过了,就这样吧,当一水题做了。

【AC代码】

//1623:Sherlock and His Girlfriend
#include<cstdio>
int const N=1e5+5;
int s[N],p[N],n,cnt;
void sprime()
{
    for(int i=2;i<=n+1;i++)
    {
        if(!p[i])p[i]=i,s[++cnt]=i;
        for(int j=1;j<=cnt&&p[j]<=p[i]&&i<=(n+1)/s[j];j++)
            p[i*s[j]]=s[j];
    }
}
int main(){
    scanf("%d",&n);
    sprime();
    if(n<3)printf("1\n");
    else printf("2\n");
    for(int i=1;i<=n;i++)
        if(p[i+1]==i+1)printf("1 ");
        else printf("2 ");
    return 0;
}

 

posted @ 2020-04-02 21:29  耍人  阅读(342)  评论(0编辑  收藏  举报