Codeforces Round #563 (Div. 2) C题 数论

传送门
要求输出一个数列{an},满足对于互质的i、j,ai!=aj.
考虑对于任意两个数,只要没有共同的质因子,两个数即互质。
所以对于a数组,每一个素数位置标号,并将其倍数(以其为因子的数)标为同样的号,最后输出即可。

//std
#include <iostream>
using namespace std;
int ans[100005];
int main()
{
    int n,c=0;
    scanf("%d",&n);
    for (int i=2;i<=n;i++)
    {
        if (!ans[i])
        {
            ans[i]=++c;
            for (int j=i;j<=n;j+=i)
            ans[j]=ans[i];
        }
        printf("%d ",ans[i]);
    }
}

posted @ 2019-06-05 19:23  Mr.doublerun  阅读(14)  评论(0)    收藏  举报