C. Product 1 Modulo N(同余)

C. Product 1 Modulo Nhttps://codeforces.com/contest/1514/problem/C

题目:

给定一个整数 n,请找出序列最长子序列 ,满足该子序列中所有元素的乘积模 n 等于 1

思路:

假设最终答案的子序列内所有元素的乘积是t,那么就是要保证t%n=1

我们要联想到这个公式:gcd(a,b)=gcd(a%b,b)

令a=t,b=n,如果gcd(t,n)!=1那么gcd(t%n,n)!=1,那么t%n!=1(因为如果t%n=1,那么gcd(t%n,n)必等于1),不符合条件,所以gcd(t,n)=1,也就意味着子序列中的任一数都与n互质,否则gcd(t,n)!=1

现在我们知道子序列中的数都与n互质,假设在1-n-1中全部与n互质的数的乘积为p

记p%n=k

如果k==1,那么直接输出全部与n互质的数即可

否则 输出除k之外的与n互质的数

这需要证明两个地方

1,k在子序列中

要证明这个,只需证明k<n,且k与n互质即可,而k<n,显而易见无需证明,只需证明k与n互质即可

还是要用到上面那个式子gcd(a,b)=gcd(a%b,b)

此时令a=p,b=n

那么gcd(p,n)=gcd(p%n,n)=gcd(k,n)=1,证毕

2,(p/k)%n=1

两种证明方式

1同余运算

因为,两边同除k,得到,因为k与n互质,所以,所以

2思维推导

首先我们知道有这么一个公式**(a%n*b%n)%n=(a*b)%n**

乘积p可以拆分成k与除k外其他与n互质的数的乘积,简写成p=k*g 令a=k,b=g,那么(k*g)%n=((k%n)*(g%n))%n,我们又知道(k*g)%n=k,k%n=k,所以k=(k*(g%n))%n

此时g%n等于x*n+1(x属于任意整数,可以*进去看看,(k*x*n+k)%n=k),所以g%n=1,也就是(p/k)%n=1

代码:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
// priority_queue<int, vector<int>, greater<int> > Q;
typedef pair<int,int> PII;
const int N = 4e5+10;
const int inf=1e9;
void solve() {
    int n;cin >> n;
    vector<int>a;
    int t=1;
    for (int i=1;i<n;i++) {
        if(gcd(i,n)==1) {
            a.push_back(i);
            t*=i;
            t%=n;
        }
    }
    if (n==1) {
        cout << 1 << endl << 1 << endl;
        return ;
    }
    if (t%n==1) {
        cout << a.size() << endl;
        for (auto x:a) {
            cout << x << ' ';
        }
        cout << endl;
    }else {
        cout << a.size()-1 << endl;
        for (int i=0;i<a.size()-1;i++) {
            cout << a[i] << ' ';
        }
        cout << endl;
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int q=1;
    // cin >> q;
    while (q--) {
        solve();
    }
    return 0;
}

同余的运算定律

同余是数论中的核心概念,给定正整数 n,若 a-b 是 n 的整数倍,则称 a 与 b 模 n 同余,记为 a≡b (mod n)。它满足一系列类似等式的运算定律,同时也有自身的特殊规则,具体分类如下:

一、 基本等价定律(同余关系的性质)

同余本质是一种等价关系,满足以下三条基本定律:

  1. 自反性对任意整数 a,有 a≡a (mod n)。例:5≡5 (mod 3)。
  2. 对称性若 a≡b (mod n),则 b≡a (mod n)。例:若 7≡1 (mod 6),则 1≡7 (mod 6)。
  3. 传递性若 a≡b (mod n) 且 b≡c (mod n),则 a≡c (mod n)。例:10≡4 (mod 6),4≡-2 (mod 6),则 10≡-2 (mod 6)。

二、 四则运算定律(同余的运算封闭性)

同余对加、减、乘运算完全封闭,对除法有条件封闭,具体规则如下:

  1. 加法定律若 a≡b (mod n),c≡d (mod n),则 a+c≡b+d (mod n)。推论:a+c≡b+c (mod n)(c=d 的特殊情况)。例:3≡1 (mod 2),5≡1 (mod 2),则 3+5≡1+1 (mod 2),即 8≡2 (mod 2)。
  2. 减法定律若 a≡b (mod n),c≡d (mod n),则 a-c≡b-d (mod n)。推论:a-c≡b-c (mod n)。例:9≡3 (mod 6),4≡1 (mod 6),则 9-4≡3-1 (mod 6),即 5≡2 (mod 6)。
  3. 乘法定律若 a≡b (mod n),c≡d (mod n),则 a×c≡b×d (mod n)。推论 1:a×c≡b×c (mod n)。推论 2(幂运算):a^k≡b^k (mod n)(k 为正整数)。例:2≡5 (mod 3),则 2^3≡5^3 (mod 3),即 8≡125 (mod 3)。
  4. 除法定律(有条件)同余的除法不满足无条件封闭,核心规则为:若 a×c≡b×c (mod n),则 a≡b (mod n/gcd (c,n))。特殊情况(消去律):若 gcd (c,n)=1(c 与 n 互质),则 a≡b (mod n)。例:6×2≡ 3×2 (mod 6) → 12≡6 (mod 6),gcd (2,6)=2,则 6≡3 (mod 6/2) → 6≡3 (mod 3)。

三、 其他常用推论

  1. 若 a≡b (mod n),则 k×a≡k×b (mod k×n)(k 为正整数)。
  2. 若 a≡b (mod n),d 是 a,b,n 的公因数,则 a/d≡b/d (mod n/d)。
  3. 若 a≡b (mod n1) 且 a≡b (mod n2),且 gcd (n1,n2)=1,则 a≡b (mod n1×n2)(中国剩余定理的基础)。
相关推荐
熊文豪4 分钟前
探索CANN ops-nn:高性能哈希算子技术解读
算法·哈希算法·cann
熊猫_豆豆21 分钟前
YOLOP车道检测
人工智能·python·算法
艾莉丝努力练剑36 分钟前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
偷吃的耗子1 小时前
【CNN算法理解】:CNN平移不变性详解:数学原理与实例
人工智能·算法·cnn
dazzle2 小时前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习
那个村的李富贵2 小时前
智能炼金术:CANN加速的新材料AI设计系统
人工智能·算法·aigc·cann
张张努力变强2 小时前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
万岳科技系统开发2 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
张登杰踩2 小时前
MCR ALS 多元曲线分辨算法详解
算法
YuTaoShao3 小时前
【LeetCode 每日一题】3634. 使数组平衡的最少移除数目——(解法一)排序+滑动窗口
算法·leetcode·排序算法