一本通————1221 分成互质组

1221:分成互质组


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 4533     通过数: 2089

【题目描述】

给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?

【输入】

第一行是一个正整数n。1 ≤ n ≤ 10。

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

【输出】

一个正整数,即最少需要的组数。

【输入样例】

6
14 20 33 117 143 175

【输出样例】

3

【来源】


No

 

代码如下:

#include <bits/stdc++.h>
#define MAXN 10500
using namespace std;
int a[MAXN];
int cnt[MAXN];
int t;
bool ok(int x)    //这里用了一个数组cnt来记录同一个组内的数可以被哪些数整除 
{
    for(int i=2; i<x; i++)
    {
        if(x%i==0)
        {
            if(cnt[i])    //说明组内已有其它数可以被i整除,即x与组内的数不是互质
            {
                return false;
            }else
            {
                cnt[i]++;
            }
        }
    }
    return true;
}

void dfs(int k,int x)
{
    for(int i=k; i<t; i++)        //多整个数进行查找
    {
        if(ok(a[i]))    //如果与组内的数互质
        {
            a[i]=-1;        //说明这个数已经在别的组里了
            k++;
            dfs(k,a[k]);   //注意不要进行回溯
        }
    //    cout<<"a[i]="<<a[i]<<endl;
    }
    return ;
}

int main()
{
    int i,ans=0;
    cin>>t;
    for(i=0; i<t; i++)
    {
        cin>>a[i];
    }
    for(i=0; i<t; i++)
    {
        if(a[i]!=-1)
        {
            ans++; //每调用一次dfs,就多一个分组

            memset(cnt,0,sizeof(cnt)); //记得要清零
            dfs(i,a[i]);
        }
    }

    cout<<ans<<endl;
    return 0;
}
/*
6
14 20 33 117 143 175
*/

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RSA是一种非对称加密算法,由三位科学家Rivest、Shamir和Adleman共同发明,在加密和数字签名领域发挥着重要作用。RSA算法基于数论中的两个重要难题:大整数分解和模幂运算。 RSA算法的核心概念是公钥和私钥。在加密过程中,首先需要生成一对密钥,其中一个是公钥,可以公开给其他人使用,而另一个是私钥,必须保密。过公钥可以将信息进行加密,而只有使用私钥才能解密。 RSA算法的加密过程如下:选择两个大素数p和q,并计算它们的乘积n=p*q作为所需的大整数。再选择一个与(p-1)*(q-1)互质的正整数e作为公钥,其中1 < e < (p-1)*(q-1)。然后计算d,满足(d*e) mod ((p-1)*(q-1)) = 1,并将d作为私钥。公钥对应着(n, e),私钥对应着(n, d)。 对于明文M,加密后得到密文C,加密过程为C = M^e mod n。解密过程为M = C^d mod n。由于大整数分解问题的复杂性,只有获得私钥才能成功解密,保护了信的安全性。 RSA算法广泛应用于计算机网络和电子商务中,例如在网站上进行数据传输过程中,使用RSA加密算法保护数据的机密性和完整性,确保数据不被窃取或篡改。 需要注意的是,尽管RSA算法在安全性上相对较好,但其加解密过程消耗较大的计算资源,在处理大量数据时效率可能较低。因此,在实际应用中,常常将RSA与其他加密算法结合使用,以平衡安全性和效率的要求。 总之,RSA算法作为一种非对称加密算法,过公钥和私钥的配对实现信息的加密和解密。它在数据安全领域的应用广泛,为保护信和数据的安全做出了重要贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九久呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值