码迷,mamicode.com
首页 > 编程语言 > 详细

CF1174C Special Coloring Problem 数论(质因数性质),构造算法

时间:2019-06-04 12:35:31      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:code   int   pre   ace   其他   pac   test   using   数字   

https://codeforces.com/contest/1174/problem/C

题意:给定一个数字n,构造出一个数组,在这个数组下标[2,n]的区间内,每个元素对(ai,aj)如果i和j是互质数,那么ai != aj  并且数组的最大值要尽量小

思路:2个不相同的质数之间必然是互质数,2个合数如果没有共同的质因数那么也是互质数。

那么对于数字n,构造出的数组的最大值 m>=p ,p为区间[2,n]的质数个数。我们给每个质数下标分配一个独特的值,并让其他所有合数下标等于它们各自其中任意一个质因数下标的值,因为2个合数之间如果是互质的,那么一定它们之间没有质因数,它们2个的值也不可能相等。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
const int INF=0x3f3f3f3f;
// n=10:
// 1 2 1 3 1 4 1 2 1
int a[maxn];


int main(){
    //freopen("datain.txt", "r", stdin);
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;cin>>n;
    int cnt=0;
    memset(a,0x3f,sizeof a);
    for(int i=2;i<=n;i++){
        if(a[i]==INF) {
            cnt++;
            a[i]=cnt;
            for(int j=2*i;j<=n;j+=i)
                a[j]=min(a[j],cnt);
        }
    }
    for(int i=2;i<=n;i++)
        cout<<a[i]<<‘ ‘;
    cout<<endl;
}

CF1174C Special Coloring Problem 数论(质因数性质),构造算法

标签:code   int   pre   ace   其他   pac   test   using   数字   

原文地址:https://www.cnblogs.com/hanker99/p/10972626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!