首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >什么是互质_bmob分页查询

什么是互质_bmob分页查询

作者头像
全栈程序员站长
发布2022-09-22 14:43:09
发布2022-09-22 14:43:09
4990
举报

给定 n 个正整数,将它们分组,使得每组中任意两个数互质。

至少要分成多少个组?

输入格式 第一行是一个正整数 n。

第二行是 n 个不大于10000的正整数。

输出格式 一个正整数,即最少需要的组数。

数据范围 1≤n≤10

代码语言:javascript
复制
输入样例:
6
14 20 33 117 143 175
输出样例:
3
代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
int a[N],g[N][N];
int n;
int res = 0x3f3f3f3f;
int vis[N];
int gcd(int a,int b){ 
   
    return b ? gcd(b,a % b) : a;
}
bool check(int g[],int a,int n){ 
   
    for(int i = 0;i < n;i ++){ 
   
        if(gcd(g[i],a) > 1)return false;
    }
    return true;
}
void dfs(int gn,int in,int k,int start){ 
   
    if(gn >= res)return;
    if(k == n)res = gn;
    bool flag = false;
    for(int i = start;i < n;i ++){ 
   
        if(!vis[i] && check(g[gn],a[i],in)){ 
   
            vis[i] = true;
            g[gn][in] = a[i];
            dfs(gn,in + 1,k + 1,start + 1);
            vis[i] = false;
            flag = true;
        }
    }
    if(!flag)dfs(gn + 1,0,k,0);
}
int main(){ 
   
    cin>>n;
    for(int i = 0;i < n;i ++){ 
   
        cin>>a[i];
    }
    
    dfs(0,0,0,0);
    
    cout<<res + 1<<endl;
    return 0;
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168849.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档