hdu (欧拉函数+容斥原理) GCD
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1695
看了别人的方法才会做 参考博客http://blog.csdn.net/shiren_Bod/article/details/5787722
题意 a,b,c,d,k五个数,a与c可看做恒为1,求在a到b中选一个数x,c到d中选一个数y,使得gcd(x,y)等于k,求x和y有多少对。
首先可以想到选取的必是k的倍数,假设是x和y倍,则x和y一定是互质的在,那么就变成了求1到b/k和1到d/k的之间的互质的组数。
假设d大于b的话,可以从1到d枚举i,当i小于等于b的时候,互质的数的个数就是其欧拉函数,当i大于b的时候就不是欧拉函数了,因为与i互质的
数要不大于b,那么可以逆向思维一下,求在不大于b的数中与i互质的数,这里就要用到容斥原理,
容斥原理大致是如果被计数的事物有A、B两类,那么,A类B类元素个数总和= 属于A类元素个数+ 属于B类元素个数—既是A类又是B类的元素个数。
那么在这道题里就是; 区间中与i不互质的个数 = (区间中i的每个质因数的倍数个数)-(区间中i的每两个质因数乘积的倍数)+(区间中i的每3个质因数的成绩的倍数个数)-(区间中i的每4个质因数的乘积)+~~~~~(这个容斥想了好一会儿才想通)
然后用dfs求容斥原理,看了别人代码才看懂,还是太菜。
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int maxn=;
int num[maxn],p[maxn][];
ll enul[maxn];
void great(){
int i,j;
enul[]=;
for (i=;i<maxn;i++){
if (!enul[i]){
for (j=i;j<maxn;j+=i){
if (!enul[j])
enul[j]=j;
enul[j]=enul[j]*(i-)/i;
p[j][num[j]++]=i;
}
}
}
}
int dfs(int a,int b,int c){
int sum=,i;
for (i=a;i<num[c];i++)
sum+=b/p[c][i]-dfs(i+,b/p[c][i],c);
return sum;
}
int main()
{
int n,a,b,c,d,k,i,t=;
great();
scanf("%d",&n);
while (n--){
scanf("%d %d %d %d %d",&a,&b,&c,&d,&k);
if(k==){
printf("Case %d: 0\n",t++);
continue;
}
b=b/k;d=d/k;
if (b>d) swap(b,d);
ll ans=;
for (i=;i<=b;i++)
ans+=enul[i];
for (i=b+;i<=d;i++){
ans+=b-dfs(,b,i);
}
printf("Case %d: %I64d\n",t++,ans);
} return ;
}
hdu (欧拉函数+容斥原理) GCD的更多相关文章
- HDU 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 1695 GCD(欧拉函数+容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...
- hdu 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Longge's problem poj2480 欧拉函数,gcd
Longge's problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6918 Accepted: 2234 ...
- [洛谷P5106]dkw的lcm:欧拉函数+容斥原理+扩展欧拉定理
分析 考虑使用欧拉函数的计算公式化简原式,因为有: \[lcm(i_1,i_2,...,i_k)=p_1^{q_{1\ max}} \times p_2^{q_{2\ max}} \times ... ...
- HDU1695 GCD (欧拉函数+容斥原理)
F - GCD Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- HDU 1695 GCD 欧拉函数+容斥原理+质因数分解
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:在[a,b]中的x,在[c,d]中的y,求x与y的最大公约数为k的组合有多少.(a=1, a ...
- [hdu1695] GCD ——欧拉函数+容斥原理
题目 给定两个区间[1, b], [1, d],统计数对的个数(x, y)满足: \(x \in [1, b]\), \(y \in [1, d]\) ; \(gcd(x, y) = k\) HDU1 ...
- hdu 1695 欧拉函数+容斥原理
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
随机推荐
- vb的VSFlexGrid控件
多行选中 VSFlexGrid的SelectionMode = flexSelectionListBox,现在可以配合Ctrl进行多行选择 循环取值 用vsflexgrid.SelectedRows ...
- SQL调用C# dll(第一中DLL,没使用强名称密匙,默认是 safe)
https://msdn.microsoft.com/zh-cn/library/ms345106(es-es).aspx 1.新建项目名称SQLDllTest,类代码如下,没有用Using引用其他类 ...
- tensorflow的save和restore
使用tensorflow中的save和restore可以对模型进行保存和恢复 import tensorflow as tf v1 = tf.Variable(tf.random_normal([1, ...
- java-学习10
使用return结束一个方法 public class function3 { public static void main(String[] args) { System.out.println( ...
- opencv批量修改图片尺寸
#include"opencv2/opencv.hpp" using namespace std; using namespace cv; #include<opencv2/ ...
- 关于WPS查看PDF文件操作问题
自己一直使用WPS打开PDF类的文档,但是使用过程中,存在下面的几个问题: pdf 如何查看当前页码pdf 如何根据目录跳转到指定页WPS 查看pdf 如何跳转到指定页 后来百度后,可以考虑将PDF转 ...
- sqlmap自动注入
基于python2.7开发 git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
- 深入理解 mysql 索引
1.资源准备 FQ软件下载:蓝灯 2.红黑树模拟:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html 3.B树模拟:https:/ ...
- 665. Non-decreasing Array
Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...
- serv-U使用
该软件是设置ftp服务器的 可以百度查询ftp服务器安装攻略,如 https://jingyan.baidu.com/article/cb5d6105c00bba005c2fe0ca.html 问题: ...