GCD(hdu1695)
GCD
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9696 Accepted Submission(s): 3623
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 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.
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)的更多相关文章
- iOS多线程开发之GCD(中篇)
前文回顾: 上篇博客讲到GCD的实现是由队列和任务两部分组成,其中获取队列的方式有两种,第一种是通过GCD的API的dispatch_queue_create函数生成Dispatch Queue:第二 ...
- 求gcd(最大公因数),lcm(最小公倍数)模板
gcd(最大公因数),lcm(最小公倍数) #include<iostream> using namespace std; int gcd(int a,int b)//辗转相除法(欧几里德 ...
- ios专题 - GCD(1)
什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像 NSOperationQueue,他们都允 ...
- iOS多线程开发之离不开的GCD(上篇)
一.GCD基本概念 GCD 全称Grand Central Dispatch(大中枢队列调度),是一套低层API,提供了⼀种新的方法来进⾏并发程序编写.从基本功能上讲,GCD有点像NSOperatio ...
- 深入GCD(一): 基本概念和Dispatch Queue
什么是GCD?Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程 ...
- 【BZOJ】2820: YY的GCD(莫比乌斯)
http://www.lydsy.com/JudgeOnline/problem.php?id=2820 此题非常神! 下文中均默认n<m 首先根据bzoj1101的推理,我们易得对于一个数d使 ...
- ios专题 - GCD(2)
何为Dispatch Sources 简单来说,dispatch source是一个监视某些类型事件的对象.当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中. ...
- 多线程编程 - GCD(转)
原文:http://blog.csdn.net/q199109106q/article/details/8566300 一.简介 在iOS所有实现多线程的方案中,GCD应该是最有魅力的,因为GCD本身 ...
- 2018.06.29 NOIP模拟 Gcd(容斥原理)
Gcd 题目背景 SOURCE:NOIP2015-SHY-2 题目描述 给出n个正整数,放入数组 a 里. 问有多少组方案,使得我从 n 个数里取出一个子集,这个子集的 gcd 不为 1 ,然后我再从 ...
随机推荐
- Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦
Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦 近期活动: 2014年9月3日,第8次西安面试&算法讲座视频 + PPT 的下载地址:http ...
- ssm框架整合 — 更新完毕
1.spring整合mybatis 数据表自行搭建 ,我的结构如下: 1).导入依赖 <!-- spring整合mybatis的依赖 --> <!-- 1.spring需要的依赖 - ...
- day12 查找文件
day12 查找文件 find命令:查找文件 find命令:在linux系统中,按照我们的要求去查询文件. 格式: find [查询的路径] [匹配模式] [匹配规则] 匹配模式: -name : 按 ...
- 零基础学习java------day8------javabean编写规范,继承,static关键字,代码块,单例设计模式
0. 今日内容提要 1. javabean书写规范 javabean:一个普通的类,用来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据. 比如:Teacher,Student,Mobile. ...
- C++之数组转换
题目如下: 这道题经过好久的思考也没找到能一次性输入两组数的方法,只能一次性处理一组数,所以就把代码放上来,欢迎交流留言一起讨论可以放两组数的方法~(QQ 841587906) 1 #include ...
- 100个Shell脚本——【脚本1】打印形状
[脚本1]打印形状 一.脚本 打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash #等腰三角形 read -p "Please input the length:&quo ...
- App内容分享
1.发送文本内容 发送简单的数据到其他应用,比如社交分分享的内容,意图允许用户快速而方便的共享信息. //分享简单的文本内容 public void btnShareText(View view) { ...
- 【C/C++】BanGDream活动点数计算器
作为一个白嫖咸鱼,我每个活动都只打出三星卡就不玩了,于是写了一个模拟器,算算还要打几把hhh #include <iostream> #include <algorithm> ...
- 如何优雅正确地通过interrupt方法中断线程
为什么废弃Thread的stop函数? 简单来说就是stop方法中断线程太过暴力随意,且会是否线程持有的锁,会导致线程安全问题.还有可能导致存在需要被释放的资源得不到释放,引发内存泄露.所以用stop ...
- Service Worker的应用
Service Worker的应用 Service worker本质上充当Web应用程序.浏览器与网络(可用时)之间的代理服务器,这个API旨在创建有效的离线体验,它会拦截网络请求并根据网络是否可用来 ...