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)(中国剩余定理的基础)。
相关推荐
ZhengEnCi13 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考14 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
夜不会漫长16 小时前
C++:红黑树
数据结构·算法
AI备案指南-满满16 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor17 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David17 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事12617 小时前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI17 小时前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..17 小时前
【C语言】扫雷游戏
c语言·算法·游戏
丘山录17 小时前
本地部署 LongCat-2.5,要 7 台机器我只有 4 台
人工智能·算法