分成互质组

GitHub跳转原题关系图返回列表

题意与原解析均从本地 OpenJudge 缓存迁移。

OJ: noi_openjudge

题目 ID: ch0205-7834

难度:未知

标签:

日期: 2026-07-30 23:01

题意

完整题面见同目录的 problem.md

思路

代码

cpp
/* 
 * noi 2.5  	7834	分成互质组
 *  基本思想: 贪心
 *      如果一个数字a能和其他数字在一个组,那就的一个组,否则自己一组
 * */
#include <bits/stdc++.h>
using namespace std;
int n,ans=0;
int a[20];
bool vis[20]={0};


int gcd(int a,int b){
    if( b == 0) return a;
    return gcd(b , a % b);
}

void init(){
    scanf("%d",&n);
    int i;
    for (i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
}
int main(){
    int i,j;
    init();
    for (i=1;i<=n;i++){
        if( vis[i] ) continue;

        vector<int> v;
        v.push_back(a[i]);
        vis[i] = 1;

        for(j=i+1;j<=n;j++){
            if( vis[j]) continue;
            bool flag = true;
            for(auto x:v){
                if( gcd(x, a[j]) != 1){
                    flag = false;
                    break;
                }
            }

            if( flag){
                v.push_back(a[j]);
                vis[j] = 1;
            }
        }
        //for( auto x : v){
            //printf("%d ",x);
        //}
        //printf("\n");

        ans++;
    }
    printf("%d\n",ans);
    return 0;
}

复杂度

总结