HDU 4135:Co-prime (容斥原理)

网友投稿 803 2022-10-21

HDU 4135:Co-prime (容斥原理)

HDU 4135:Co-prime (容斥原理)

Co-prime

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4289    Accepted Submission(s): 1698

Problem Description

Given a number N, you are asked to count the number of integers between A and B inclusive which are relatively prime to N. Two integers are said to be co-prime or relatively prime if they have no common positive divisors other than 1 or, equivalently, if their greatest common divisor is 1. The number 1 is relatively prime to every integer.

Input

The first line on input contains T (0 < T <= 100) the number of test cases, each of the next T lines contains three integers A, B, N where (1 <= A <= B <= 10 15) and (1 <=N <= 10 9).

Output

For each test case, print the number of integers between A and B inclusive which are relatively prime to N. Follow the output format below.

Sample Input

21 10 23 15 5

Sample Output

Case #1: 5Case #2: 10

思路:通常我们求1-n中与n互质的数的个数都是用欧拉函数! 但如果n比较大或者是求1~m中与n互质的数的个数等等问题,要想时间效率高的话还是用容斥原理!容斥:先对n分解质因数,分别记录每个质因数, 那么所求区间内与某个质因数不互质的个数就是n / r(i),假设r(i)是r的某个质因子 假设只有三个质因子, 总的不互质的个数应该为p1+p2+p3-p1*p2-p1*p3-p2*p3+p1*p2*p3, 及容斥原理,可以转向百度百科查看相关内容 pi代表n/r(i),即与某个质因子不互质的数的个数 ,当有更多个质因子的时候, 可以用状态压缩解决,二进制位上是1表示这个质因子被取进去了。 如果有奇数个1,就相加,反之则相减。

AC代码

#include#include#include#includetypedef __int64 LL;using namespace std;vectorprime;void jprime(LL n) //分解质因子{ for(LL i=2; i*i<=n; i++) if(n%i==0) { prime.push_back(i); //质因子 while(n%i==0) n/=i; } if(n>1)prime.push_back(n);}LL solve(LL a,LL b,LL n) //[a,b]中与n互质的数的个数{ LL sum=0; LL size=prime.size(); for(LL msk=1; msk<(1<

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:POJ 1426 Find The Multiple (BFS)
下一篇:CabalPHP- 基于 Swoole 的轻量级框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~