hdu 1695 GCD(容斥原理)
来源:互联网 发布:软件企业 编辑:程序博客网 时间:2024/05/16 18:50
和hdu 2841差不多,去个重复就行
x 属于(1,b),y属于(1,d),gcd(x,y)=k,就是gcd(x/k,y/k)=1,x/k属于(1,b/k),y/k属于(1,d/k)
#include <bits/stdc++.h>using namespace std;vector<int> p;int solve(int num, int n){ if(num == 1) return n; p.clear(); for(int i = 2; i <= num/i; ++i) { if(num%i == 0) { p.push_back(i); while(num%i == 0) num /= i; } } if(num > 1) p.push_back(num); int len = p.size(); int ret = 0; for(int i = 1; i < (1<<len); ++i) { int mult = 1; int cnt = 0; for(int j = 0; j < len; ++j) { if(i&(1<<j)) { ++cnt; mult *= p[j]; } } if(cnt&1) ret += n/mult; else ret -= n/mult; } return n-ret;}int main(){ ios::sync_with_stdio(false); int T,a,b,c,d,k; long long res; cin >> T; int time = 0; while(T--) { cin >> a >> b >> c >> d >> k; cout << "Case " << ++time << ": "; if(k == 0) { cout << 0 <<endl; continue; } b /= k; d /= k; if(b == 0 || d == 0) { cout << 0 <<endl; continue; } if(b > d)swap(b,d);//让b作为小的 res = 1; for(int i = 1; i <= b; ++i) res += (solve(i,d) - solve(i,i)); cout << res << endl; } return 0;}
阅读全文
0 0
- HDU 1695 GCD (容斥原理)
- hdu 1695 GCD(容斥原理)
- HDU 1695:GCD _容斥原理
- HDU 1695 GCD 【数论,容斥原理】
- Hdu 1695 GCD (数论 容斥原理)
- [容斥原理] hdu 1695 GCD
- 【容斥原理】HDU 1695 GCD
- HDU-1695-GCD +素数+容斥原理
- hdu 1695 GCD 容斥原理
- hdu 1695 GCD(容斥原理)
- [ACM] HDU 1695 GCD (容斥原理)
- hdu-1695 GCD(容斥原理+欧拉函数)
- hdu 1695 GCD (欧拉函数、容斥原理)
- HDU 1695 GCD(欧拉函数+容斥原理)
- HDU 1695 GCD(欧拉函数+容斥原理)
- HDU 1695 GCD (欧拉函数+容斥原理)
- HDU 1695 GCD(容斥原理 + 欧拉函数)
- 【HDU】1695 - GCD(欧拉函数 & 容斥原理)
- ssh
- Android 7.0脱坑指南
- PHP
- 解决跨域请求的filter
- Ubuntu+xgboost
- hdu 1695 GCD(容斥原理)
- 城市列表
- Flex Builder 破解和注册方法
- Python学习——reduce()函数的用法
- 当margin和padding的值是百分比时,应该如何计算的?
- 动态移动类型列显示物料移动
- LBP特征原理及代码实现
- java中逻辑右移">>>"算术右移">>"的区别?
- C语言:全局变量在多个 c 文件中公用的方法