GCD

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9696    Accepted Submission(s): 3623

Problem Description
Given
5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that
GCD(x, y) = k. GCD(x, y) means the greatest common divisor of x and y.
Since the number of choices may be very large, you're only required to
output the total number of different number pairs.
Please notice that, (x=5, y=7) and (x=7, y=5) are considered to be the same.

Yoiu can assume that a = c = 1 in all test cases.
 
Input
The
input consists of several test cases. The first line of the input is
the number of the cases. There are no more than 3,000 cases.
Each
case contains five integers: a, b, c, d, k, 0 < a <= b <=
100,000, 0 < c <= d <= 100,000, 0 <= k <= 100,000, as
described above.
 
Output
For each test case, print the number of choices. Use the format in the example.
 
Sample Input
2
1 3 1 5 1
1 11014 1 14409 9
 
Sample Output
Case 1: 9
Case 2: 736427
思路:容斥+欧拉函数;
n,m最大公约数为k,那么就转换成找(n/k,m/k)互质的对数;那么这个会想到欧拉函数,但是欧拉函数可以解决,n,m相等的情况,当n,m不等的时候
那么直接用容斥跑(1,min(n,m))在(1,max(m,n))中互质的数的个数,最后再减掉oula[min(n,m)],这是重复的,然后再加上1也就是(1,1)是没重,但在oula[]中减了
  1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<stdlib.h>
6 #include<queue>
7 #include<math.h>
8 #include<vector>
9 using namespace std;
10 typedef long long LL;
11 bool prime[100005];
12 int ans[100005];
13 int flag[100005];
14 int fen[100];
15 int d[100005];
16 LL oula[100005];
17 int slove(int n,int m);
18 int main(void)
19 {
20 int i,j,k;
21 fill(ans,ans+100005,1);
22 fill(d,d+100005,1);
23 int c=0;
24 for(i=0; i<=100000; i++)oula[i]=i;
25 for(i=2; i<=100000; i++)
26 {
27 if(!prime[i])
28 {
29 for(j=2; (i*j)<=100000; j++)
30 {
31 prime[i*j]=true;
32 ans[i*j]*=i;
33 d[i*j]=i;
34 }
35 }
36 }
37 oula[0];
38 oula[1]=1;
39 for(i=2; i<=100000; i++)
40 {
41 if(!prime[i])
42 {
43 ans[i]*=i;
44 d[i]=i;
45 for(j=1; (LL)i*(LL)j<=100000; j++)
46 {
47 oula[i*j]/=i;
48 oula[i*j]*=(i-1);
49 }
50 }
51 }
52 int s;
53 scanf("%d",&k);
54 LL sum=0;
55 int n,m;
56 for(i=2; i<=100000; i++)oula[i]+=oula[i-1];
57 for(s=1; s<=k; s++)
58 {
59 sum=0;
60 int xx,yy,vv;
61 memset(flag,-1,sizeof(flag));
62 scanf("%d %d %d %d %d",&xx,&n,&yy,&m,&vv);
63 if(vv>n||vv>m||vv==0)
64 {
65 printf("Case %d: ",s);
66 printf("0\n");
67 }
68 else
69 {
70 if(n>m)
71 {
72 swap(n,m);
73 }
74 n/=vv;
75 m/=vv;
76 sum=0;
77 for(i=1; i<=n; i++)
78 {
79 if(flag[ans[i]]!=-1)
80 {
81 sum+=flag[ans[i]];
82 }
83 else
84 {
85 flag[ans[i]]=slove(i,m);
86 sum+=flag[ans[i]];
87 }
88 }
89 //printf("%lld %lld\n",oula[5],sum);
90 printf("Case %d: %lld\n",s,sum-oula[min(n,m)]+1);
91 }
92 }
93 return 0;
94 }
95 int slove(int n,int m)
96 {
97 int i,j,k;
98 int nn=n;
99 int cnt=0;
100 while(n>1)
101 {
102 fen[cnt++]=d[n];
103 n/=d[n];
104 }
105 int cc=1<<cnt;
106 LL sum=0;
107 int sum1=0;
108 for(i=1; i<cc; i++)
109 {
110 int ck=0;
111 int ak=1;
112 for(j=0; j<cnt; j++)
113 {
114 if(i&(1<<j))
115 {
116 ak*=fen[j];
117 ck++;
118 }
119 }
120 if(ck%2)
121 {
122 sum+=m/ak;
123 }
124 else sum-=m/ak;
125 }
126 return m-sum;
127 }

GCD(hdu1695)的更多相关文章

  1. iOS多线程开发之GCD(中篇)

    前文回顾: 上篇博客讲到GCD的实现是由队列和任务两部分组成,其中获取队列的方式有两种,第一种是通过GCD的API的dispatch_queue_create函数生成Dispatch Queue:第二 ...

  2. 求gcd(最大公因数),lcm(最小公倍数)模板

    gcd(最大公因数),lcm(最小公倍数) #include<iostream> using namespace std; int gcd(int a,int b)//辗转相除法(欧几里德 ...

  3. ios专题 - GCD(1)

    什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像 NSOperationQueue,他们都允 ...

  4. iOS多线程开发之离不开的GCD(上篇)

    一.GCD基本概念 GCD 全称Grand Central Dispatch(大中枢队列调度),是一套低层API,提供了⼀种新的方法来进⾏并发程序编写.从基本功能上讲,GCD有点像NSOperatio ...

  5. 深入GCD(一): 基本概念和Dispatch Queue

    什么是GCD?Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程 ...

  6. 【BZOJ】2820: YY的GCD(莫比乌斯)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2820 此题非常神! 下文中均默认n<m 首先根据bzoj1101的推理,我们易得对于一个数d使 ...

  7. ios专题 - GCD(2)

    何为Dispatch Sources 简单来说,dispatch source是一个监视某些类型事件的对象.当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中. ...

  8. 多线程编程 - GCD(转)

    原文:http://blog.csdn.net/q199109106q/article/details/8566300 一.简介 在iOS所有实现多线程的方案中,GCD应该是最有魅力的,因为GCD本身 ...

  9. 2018.06.29 NOIP模拟 Gcd(容斥原理)

    Gcd 题目背景 SOURCE:NOIP2015-SHY-2 题目描述 给出n个正整数,放入数组 a 里. 问有多少组方案,使得我从 n 个数里取出一个子集,这个子集的 gcd 不为 1 ,然后我再从 ...

随机推荐

  1. HDFS03 HDFS的API操作

    HDFS的API操作 目录 HDFS的API操作 客户端环境准备 1.下载windows支持的hadoop 2.配置环境变量 3 在IDEA中创建一个Maven工程 HDFS的API实例 用客户端远程 ...

  2. Go知识盲区--闭包

    1. 引言 关于闭包的说明,曾在很多篇幅中都有过一些说明,包括Go基础--函数2, go 函数进阶,异常与错误 都有所提到, 但是会发现,好像原理(理论)都懂,但是就是不知道如何使用,或者在看到一些源 ...

  3. 大数据学习day23-----spark06--------1. Spark执行流程(知识补充:RDD的依赖关系)2. Repartition和coalesce算子的区别 3.触发多次actions时,速度不一样 4. RDD的深入理解(错误例子,RDD数据是如何获取的)5 购物的相关计算

    1. Spark执行流程 知识补充:RDD的依赖关系 RDD的依赖关系分为两类:窄依赖(Narrow Dependency)和宽依赖(Shuffle Dependency) (1)窄依赖 窄依赖指的是 ...

  4. Ecshop 后台导出订单Excel时, 内存溢出的解决方法

    今天继续跟大家分享一下,在我配置Ecshop时的问题. 今天的问题是在后台想要导出订单列表Excel时出现的内存溢出.错误提示如下 问题:  Fatal error: Allowed memory s ...

  5. 【leetcode】952. Largest Component Size by Common Factor(Union find)

    You are given an integer array of unique positive integers nums. Consider the following graph: There ...

  6. C++ 写出这个数

    题目如下: 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1. 输出格式: 在一行内 ...

  7. LeetCode33题——搜索旋转排序数组

    1.题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存 ...

  8. Java 8实现BASE64编解码

    Java一直缺少BASE64编码 API,以至于通常在项目开发中会选用第三方的API实现.但是,Java 8实现了BASE64编解码API,它包含到java.util包.下面我会对Java 8的BAS ...

  9. redis入门到精通系列(七):redis高级数据类型详解(BitMaps,HyperLogLog,GEO)

    高级数据类型和五种基本数据类型不同,并非新的数据结构.高级数据类型往往是用来解决一些业务场景. (一)BitMaps (1.1) BitMaps概述 在应用场景中,有一些数据只有两个属性,比如是否是学 ...

  10. 为什么Redis集群有16384个槽

    一.前言 我在<那些年用过的Redis集群架构(含面试解析)>一文里提到过,现在redis集群架构,redis cluster用的会比较多. 如下图所示 对于客户端请求的key,根据公式H ...