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)(中国剩余定理的基础)。
相关推荐
MicroTech20252 小时前
MLGO微算法科技发布改进量子ODE算法,支持不可对角化矩阵与非齐次系统实现指数级误差优化
科技·算法·矩阵
U-52184F692 小时前
CGAL 实战笔记:深入理解 2D 符合三角剖分与网格生成 (针对 CAM 开发)
笔记·算法
代码游侠2 小时前
应用——UDP 网络编程
linux·运维·开发语言·学习·算法
AI科技星2 小时前
光速的几何本质与运动极限:基于张祥前统一场论对光子及有质量粒子运动的统一诠释
数据结构·人工智能·经验分享·算法·计算机视觉
没有bug.的程序员2 小时前
负载均衡的真正含义:从算法到架构的深度解析
java·jvm·算法·微服务·架构·负载均衡
谈笑也风生2 小时前
经典算法题型之复数乘法(一)
数据结构·算法
剪一朵云爱着2 小时前
PAT 1056 Mice and Rice
算法·pat考试
星火开发设计2 小时前
快速排序详解:原理、C++实现与优化技巧
java·c++·算法·排序算法·快速排序·知识
一分之二~2 小时前
回溯算法--全排列
c语言·数据结构·c++·算法·leetcode