hdu 4135 Co-prime (组合数学:容斥定理+欧拉函数)
2014-08-22 21:00
459 查看
给定a, b, n
找到a,b范围内与n互质的数
我的方法是用欧拉函数求出n的唯一分解式
唯一分解式中对应素数在a,b范围内的倍数均与n不互质
求出倍数的个数,再用总数减去这些倍数的个数即可
但是对于1, 10, 6
6=2×3,因为2,3的倍数有6重复出现,所以要用到容斥定理10-(10/2-1/2)-(10/3-1/3)+(10/6-1/6)
这道题还有一个要注意的地方就是使用(b/tmp-a/tmp)求a-b范围内tmp倍数的个数时需要考虑a%tmp==0的情况
如输入:4, 10, 2
该范围内与2不互质的数应该有(4,6,8,10)四个
而(b/tmp-a/tmp)==(10/2-4/2)==3个
所以应该判断如果a%tmp==0,该等式的结果++
0ms代码如下:
找到a,b范围内与n互质的数
我的方法是用欧拉函数求出n的唯一分解式
唯一分解式中对应素数在a,b范围内的倍数均与n不互质
求出倍数的个数,再用总数减去这些倍数的个数即可
但是对于1, 10, 6
6=2×3,因为2,3的倍数有6重复出现,所以要用到容斥定理10-(10/2-1/2)-(10/3-1/3)+(10/6-1/6)
这道题还有一个要注意的地方就是使用(b/tmp-a/tmp)求a-b范围内tmp倍数的个数时需要考虑a%tmp==0的情况
如输入:4, 10, 2
该范围内与2不互质的数应该有(4,6,8,10)四个
而(b/tmp-a/tmp)==(10/2-4/2)==3个
所以应该判断如果a%tmp==0,该等式的结果++
0ms代码如下:
//#include <bits/stdc++.h> #include <vector> #include <cstdio> #include <iostream> #define LL long long using namespace std; LL ans; vector<int> vec; LL gcd(LL a, LL b) { return b ? gcd(b, a%b) : a; } void euler_phi(int n) { vec.clear(); for(int i=2; i*i<=n&&n>1; ++i) { while(n%i == 0) { vec.push_back(i); n /= i; while(n % i == 0) n /= i; } } if(n > 1) vec.push_back(n); return ; } void dfs(LL a, LL b, LL w, int i, int k) { for( ; i<vec.size(); ++i) { if(vec[i]) { LL tmp = w/gcd(w, vec[i])*vec[i]; //printf("tmp = %d\n", tmp); ans += k*(b/tmp-a/tmp); if(a%tmp == 0) ans += k; dfs(a, b, tmp, i+1, -k); } } } int main(void) { int T, n; LL a, b; scanf("%d", &T); for(int t=1; t<=T; ++t) { cin >> a >> b >> n; ans = 0; ans += b-a+1; euler_phi(n); dfs(a, b, 1, 0, -1); printf("Case #%d: ", t); cout << ans << endl; } }
相关文章推荐
- HDU 4135 Co-prime [容斥定理]【数论】
- HDU -- 4135 Co-prime【质因子分解+状压 + 容斥定理】+ 模板
- hdu 4135 Co-prime 复习容斥
- 数学 ( 容斥原理&&求区间内互质数的个数)——Co-prime ( HDU 4135 )
- HDU 4135 Co-prime (容斥)
- hdu - Coprime - 二分搜索+容斥 - 组合学
- HDU 4135 Co-prime (容斥)
- [cf803F] Coprime Subsequences(组合数学,容斥)
- HDU 4135 Co-prime (容斥原理, 数学)
- hdu 4366 Card Collector(组合数学:容斥定理)
- 容斥例程 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 1796 How many integers can you find [容斥定理] 【组合数学】
- HDU 4135 Co-prime 区间内与n互质的个数 容斥(入门
- HDU 4135 Co-prime (分解质因数 + 容斥)
- 【HDU】4135 Co-prime(容斥原理简单应用 质因子的分解)