问题标题: 1586 质数质数 1590 互质数 1670 整数求余

0
0

0
已采纳
陶梓锐
陶梓锐
新手光能
新手光能

1670:不用高级数据写只能得80分,我也看了个测试数据。

我的核心代码如下(枚举):

    for (int i=0; i<=1000000; i++) {
        bool f=true;
        for (int j=1; j<=n; j++) {
            if (i%a[j]!=r[j]) {
                f=false;
                break;
            }
        }
        if (f==true) {
            fa=false; cout<<i<<endl; break;
        }
    }

剩下的那个测试点,输出是:4376436883

1
张睿杰
张睿杰
初级天翼
初级天翼

题目是让求i从1增加到n的gcd(n,i)的和,我们假设gcd(n,i) = k,则gcd(n/k,i/k) = 1。即假设gcd(n/k, x ) = 1,则gcd(n,x*k) = k。gcd(n,i) = k,k的取值是确定的,即n的所有因子,所以,满足gcd(n/k,x) = 1个x的个数乘以k即为所有满足gcd(n,i) = k 的和。因此就转化为n/k的欧拉函数的值乘以k的所有的和。

举个例子12来说,12的因子为1,2,3,4,6,12,则和为12/1的欧拉函数值*1 + 12/2的欧拉函数值 * 2 + 12/3的欧拉函数值 * 3 + 12/4的欧拉函数值 * 4 + 12/6的欧拉函数值*6 + 12/12 的欧拉函数值 * 12。

至于一个数n的所有因子,可以先将n分解成素数幂的形式,然后再用排列组合的知识或者是深搜求出其所有因子。

1590互质数

0
栾峻岩
栾峻岩
初级天翼
初级天翼

这是高级数据结构的题目,初中才学哦!

0
我要回答