GCD(关于容斥原理)

Problem Description
Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y) = k. GCD(x, y) means the greatest common divisor of x and y. Since the number of choices may be very large, you're only required to output the total number of different number pairs.
Please notice that, (x=5, y=7) and (x=7, y=5) are considered to be the same.

Yoiu can assume that a = c = 1 in all test cases.
 

 

Input
The input consists of several test cases. The first line of the input is the number of the cases. There are no more than 3,000 cases.
Each case contains five integers: a, b, c, d, k, 0 < a <= b <= 100,000, 0 < c <= d <= 100,000, 0 <= k <= 100,000, as described above.
 

 

Output
For each test case, print the number of choices. Use the format in the example.
 

 

Sample Input
2 1 3 1 5 1 1 11014 1 14409 9
 

 

Sample Output
Case 1: 9 Case 2: 736427
 

这个问题是用容斥原理来解决的,我们知道的是根据gcd(x,y)=k--> gcd(x/k,y/k)=1;

这样子的话,我们当k为0的时候特判一下就行了,剩下的就是根据容斥原理来做了,已知区间[1,y]如何求z和区间里面的几个数互质。。。

但是有一点我是真的不明白,为什么不超时啊,3000组数据的话,我真的不知道为什么不超时,求大神指点啊。

转载于:https://www.cnblogs.com/Heilce/p/6405109.html

在组合数学中,欧拉函数φ(N),也称为 totient 函数,表示不大于N的正整数中与N互质的数的数目。不直接利用积性原理,我们可以通过容斥原理来推导。容斥原理通常用于解决关于集合交集的问题。 这里不使用积性原理(如费马小定理),而是考虑每个小于N的数x是否与N互质。根据容斥原理[^1],对于任意两个互质的模数mi 和 mj,如果它们都不大于n_i(即 ni < mi),那么存在一个x满足对所有i,x除以mi 的余数等于ni。换句话说,x可以按照每个mi 来取模得到不同的余数。 但是要找出与N互质的数的数量,我们需要考虑的是哪些数不是N的因子。因为如果x是N的因子,它就不能与N互质。所以,我们可以从1到N-1枚举所有可能的数x,减去那些是N的因子的情况。这对应着φ(N) = N - Σ(对于每个1 ≤ k ≤ sqrt(N),gcd(k,N) > 1)。 这个公式展示了如何通过容斥原理计算φ(N):从N中减去所有小于或等于√N且与N有公约数的数的数量。需要注意的是,这里的gcd表示最大公约数。 具体操作时,可以编写一段程序来实现上述思路: ```python def phi(N): result = N for k in range(2, int(N**0.5)+1): # 只需考虑小于sqrt(N)的k if gcd(k, N) == 1: # 如果k与N互质 result -= 1 # 从结果中减去1 return result # 使用gcd函数(需要实现) def gcd(a, b): pass # 实现欧几里得算法来计算a和b的最大公约数 phi(N) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值