HDU 4135 Co-prime (容斥原理)
来源:互联网 发布:js调用手写输入法 编辑:程序博客网 时间:2024/06/05 02:28
Co-prime
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4779 Accepted Submission(s): 1914
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.
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 <= 1015) and (1 <=N <= 109).
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: 10HintIn the first test case, the five integers in range [1,10] which are relatively prime to 2 are {1,3,5,7,9}.
Source
The Third Lebanese Collegiate Programming Contest
Recommend
lcy
题意:求A-B之间与N互质的数的数量
思路:先求出N的因子,之后使用容斥原理
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;const int MAXN=1e5+5;int prime[MAXN][10];int cnt[MAXN];int factor[MAXN];int q_factor(ll n){ int num = 0; for(ll i = 2; i*i <= n; ++i) { if(n%i==0) { while(n%i==0) { n /= i; } factor[num++] = i; } } if(n != 1) factor[num++] = n; return num;}ll solve(int m,ll n){ ll res=0; for(int i=1;i<(1<<m);i++) { int num=0; for(int j=i;j!=0;j>>=1) num+=j&1; int lcm=1; for(int j=0;j<m;j++) { if(i>>j&1) { lcm=lcm/__gcd(lcm,factor[j])*factor[j]; if(lcm>n) break; } } if(num%2==0) res-=(ll)(n/lcm); else res+=(ll)(n/lcm); } return res;}int main(){ int t; scanf("%d",&t); int casi=1; while(t--) { ll a,b,c; scanf("%lld%lld%lld",&a,&b,&c); int k=q_factor(c); ll ans=b-solve(k,b); ans-=a-1-solve(k,a-1); printf("Case #%d: %lld\n",casi++,ans); } return 0;}
阅读全文
0 0
- [容斥原理] hdu 4135 Co-prime
- 【HDU】4135 Co-prime 容斥原理
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime 容斥原理
- hdu 4135 Co-prime【容斥原理】
- hdu 4135 Co-prime (容斥原理)
- 【容斥原理】HDU 4135 Co-prime
- HDU 4135 Co-prime (容斥原理)
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime 容斥原理
- hdu 4135 Co-prime 容斥原理
- HDU 4135 Co-prime(容斥原理)
- HDU 4135 Co-prime(容斥原理)
- HDU 4135 Co-prime 容斥原理
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime(容斥原理)
- [HDU 4135]Co-prime:容斥原理
- 容斥原理:HDU-4135Co-prime
- 决策树转规则
- 牛客网-剑指offer
- Ubuntu64位下搭建javaWeb小型服务器
- vue2.0 axios前后端数据处理
- 大学回忆录
- HDU 4135 Co-prime (容斥原理)
- 3种Java从文件路径中获取文件名的方法
- swiper-移动端网页触摸内容滑动js插件
- 51Nod 1174区间中最大的数
- 光耦型号内部结构图
- tensorflow 的reshape()和resize()函数
- Python post 传递text格式参数(自己组装数据头)
- 2.自动索引计算数组元素的平方和
- Opencv实现的简易绘图工具