HDU 1695 GCD (容斥原理+质因数分解)
来源:互联网 发布:淘宝电商代运营靠谱吗 编辑:程序博客网 时间:2024/05/16 02:26
先进行预处理,对每一个数分解质因数。
然后将因为若gcd(x,y)==z,那么gcd(x/z,y/z)==1,又因为不是z的倍数的肯定不是,所以不是z的倍数的可以直接去掉,所以只要将b和d除以k,然后就转化成了求两个范围中互质的对数了。这时候可以枚举1~b,然后用容斥原理找1~d范围内的与枚举数互质的数的个数,为了避免重复,只要再限定下大小关系就可以了,具体见代码。
代码如下:
#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>using namespace std;#define LL __int64const int mod=1e9+7;const int INF=0x3f3f3f3f;LL ans;LL a, b, c, d;vector<int>vec[110000];void dfs(LL i, int cur, int cnt, LL tmp){ tmp*=(LL)vec[i][cur]; if(cnt&1) { ans+=(LL)min(d,i)/tmp; } else { ans-=(LL)min(d,i)/tmp; } for(int j=cur+1; j<vec[i].size(); j++) { dfs(i,j,cnt+1,tmp); }}void init(){ int i, j, x, cnt; for(i=1; i<=100000; i++) { x=i; cnt=0; for(j=2; j*j<=x; j++) { if(x%j==0) { vec[i].push_back(j); while(x%j==0) x/=j; } } if(x>1) vec[i].push_back(x); }}int main(){ int t, i, j, num=0; LL sum, k; init(); scanf("%d",&t); while(t--) { scanf("%I64d%I64d%I64d%I64d%I64d",&a,&b,&c,&d,&k); num++; if(!k) { printf("Case %d: 0\n",num); continue ; } b/=k; d/=k; if(b<d) swap(b,d); sum=d*(d+1)/2+(b-d)*d; ans=0; for(i=1; i<=b; i++) { for(j=0; j<vec[i].size(); j++) { dfs(i,j,1,1); } //printf("%I64d\n",ans); } //printf("%I64d %I64d\n",sum,ans); printf("Case %d: %I64d\n",num,sum-ans); } return 0;}
1 0
- HDU 1695 GCD (容斥原理+质因数分解)
- HDU 1695 GCD 欧拉函数+容斥原理+质因数分解
- HDU 1695 GCD 【容斥】【质因数分解】【欧拉函数】
- HDU 5072 容斥原理 + 质因数分解
- GCD and LCM 质因数分解与容斥原理
- #HDU1695#GCD(容斥 + 分解质因数)
- HDU 4135 Co-prime (容斥原理+质因数分解)
- HDU 4407 Sum(容斥原理+质因数分解)
- HDU 4135 Co-prime (容斥原理/分解质因数)
- HDU 4135 Co-prime(容斥原理+分解质因数)
- 容斥原理+质因数分解+组合数学
- poj 3904 容斥原理+质因数分解
- 容斥原理+质因数分解-HDU4135
- 【HDU1695】 GCD (欧拉筛+欧拉函数+质因数分解+容斥原理)
- 51nod 1687 lyk与gcd 状态压缩+容斥原理+质因数分解+
- hdu 4497 GCD and LCM(唯一分解+容斥原理)
- HDU 1695 GCD(素因子分解+容斥原理+欧拉函数)
- hdu 1695 GCD (欧拉函数+容斥原理+素因子分解)
- C and UNIX Standards
- 勾股数 BZOJ 1041
- int 占用多少字节
- Docker同时启动多个服务
- 跨平台的获取时间戳【win32和linux】
- HDU 1695 GCD (容斥原理+质因数分解)
- 单链表
- 用于汽车电子的CAN、LIN、MOST总线
- 实验B----CFG是P成员
- 学习vi和vim编辑器(11):高级编辑方法(2)
- 猜数字游戏
- 成为“新时代”程序员应具有的能力
- R语言的小技巧
- 《汇编语言》(王爽著)第11章 标志寄存器