互质数的最大不能组合数

给定A和B,A和B互质,求最大不能组合数,和不能组合数的个数。

基础知识:
GCD(A, B) =1 ⇒ LCM(A, B) = AB
剩余类,把所有整数划分成m个等价类,每个等价类由相互同余的整数组成

任何数分成m个剩余类,分别为 mk,mk+1,mk+2,……,mk+(m-1)
分别记为{0(mod m)},{1(mod m)}……
而n的倍数肯定分布在这m个剩余类中
因为GCD(m,n)=1,所以每个剩余类中都有一些数是n的倍数,并且是平均分配它的旁证,可见HDOJ 1222 Wolf and Rabbit
设 kmin = min{ k | nk ∈ {i (mod m)} }, i ∈ [0, m)
则 n*kmin 是{i (mod m)}中n的最小倍数。特别的,n*m ∈ {0 (mod m)}
n*kmin 是个标志,它表明{i (mod m)}中n*kmin 后面所有数,即n*kmin + j*m必定都能被组合出来
那也说明最大不能组合数必定小于n*kmin
我们开始寻找max{ n*kmin }
LCM(m, n) = m*n,所以很明显(m-1)*n是最大的
因为(m-1)n是n*kmin中的最大值,所以在剩下的m-1个剩余类中,必定有比它小并且能被m和n组合,这些数就是(m-1)*n -1,(m-1)*n -2,……,(m-1)*n -(m-1)
所以最大不能被组合数就是 (m*n)-n-m

如果m和n不互素,那{1 (mod m)}不能被m组合,同样也不能被n和m组合

我们能求出各个剩余类的n*kmin之后,不能组合数的个数就是每个剩余类中小于各自n*kmin的数的个数总和。
观察如下:
M = 5,N = 3
{0(mod 5)}:0,5,10,15……
{1(mod 5)}:16,11,16……
{2(mod 5)}:2712,17……
{3(mod 5)}:3,8,13,18……
{4(mod 5)}:49,14,19……
红色的就是不能组合数,可以看出在剩余类中它的数目有规律
Total = [0+1+2] + [0+1]
因为m和n互质,必有一个不完全周期
整理以后,可得公式 Total = (n-1)*(m-1)/2

### C语言实现输出1100之间的互质数 以下是基于最大公约数(GCD)的概念来判断两个数是否互质的方法。如果两数的最大公约数为1,则这两个数互质。 #### 方法描述 为了找到1100之间所有的互质数对,可以采用双重循环遍历每一对可能的组合,并通过计算其最大公约数来验证是否满足条件。这里提供了一个完整的C语言程序示例: ```c #include <stdio.h> // 定义求解最大公约数的函数 int gcd(int i, int j) { return j ? gcd(j, i % j) : i; } int main() { int count = 0; // 遍历1100的所有整数对 for (int i = 1; i <= 100; i++) { for (int j = i + 1; j <= 100; j++) { if (gcd(i, j) == 1) { // 如果最大公约数为1,则说明两者互质 printf("(%d, %d)\n", i, j); count++; } } } printf("\nTotal number of coprime pairs between 1 and 100: %d\n", count); return 0; } ``` #### 关键点解析 - **最大公约数算法**:使用欧几里得算法递归地求解两个数的最大公约数[^1]。 - **双重循环结构**:外层循环控制第一个数`i`,内层循环控制第二个数`j`,其中`j`总是大于`i`以避免重复计数。 - **互质判定**:当且仅当`gcd(i, j)`的结果等于1时,认为`(i, j)`是一对互质数。 运行此代码后,将会打印出所有位于区间[1, 100]内的互质数对及其总数。 #### 示例输出 假设执行以上代码片段,部分输出如下所示: ``` (1, 2) (1, 3) (1, 4) ... (98, 99) (98, 100) Total number of coprime pairs between 1 and 100: XXXX ``` 请注意,实际总数量取决于具体逻辑运算结果。 --- ### 解释 - **gcd 函数**:这是一个递归函数,用来计算两个正整数 `i` 和 `j` 的最大公约数。它利用了欧几里得算法的核心原理——两个整数的最大公约数等于较小的那个数和两数相除余数的最大公约数[^1]。 - **for 循环嵌套**:外部循环变量 `i` 表示当前考虑的第一个数;内部循环变量 `j` 则表示与 `i` 进行比较的另一个数。由于 `(i, j)` 和 `(j, i)` 是相同的互质关系,因此只需让 `j > i` 即可减少冗余计算。 - **printf 打印**:对于每一组符合条件的互质数对 `(i, j)`,都会立即输出至标准输出设备。 - **count 计数器**:记录并统计最终得到的有效互质数对数目,在最后统一展示出来。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值