HDU1695-GCD(数论-欧拉函数-容斥)
GCD
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5454 Accepted Submission(s): 1957
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.
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.
2
1 3 1 5 1
1 11014 1 14409 9
Case 1: 9
Case 2: 736427HintFor the first sample input, all the 9 pairs of numbers are (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 5), (3, 4), (3, 5).
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
using namespace std; const int maxn = 10000+10;
const int maxxn = 100000+10;
typedef long long ll;
int a,b,gcd;
ll ans;
bool isPrime[maxn];
ll minDiv[maxxn],phi[maxxn],sum[maxxn];
vector<int> prime,cnt[maxxn],digit[maxxn]; void getPrime(){
prime.clear();
memset(isPrime,1,sizeof isPrime);
for(int i = 2;i < maxn; i++){
if(isPrime[i]){
prime.push_back(i);
for(int j = i*i; j < maxn; j+=i){
isPrime[j] = 0;
}
}
}
} void getPhi(){
for(ll i = 1; i < maxxn; i++){
minDiv[i] = i;
}
for(ll i = 2; i*i < maxxn; i++){
if(minDiv[i]==i){
for(int j = i*i; j < maxxn; j += i){
minDiv[j] = i;
}
}
}
phi[1] = 1;
sum[1] = 1;
for(ll i = 2; i < maxxn; i++){
phi[i] = phi[i/minDiv[i]];
if((i/minDiv[i])%minDiv[i]==0){
phi[i] *= minDiv[i];
}else{
phi[i] *= minDiv[i]-1;
}
sum[i] = phi[i]+sum[i-1];
}
} void getDigit(){
for(ll i = 1; i < maxxn; i++){
int x = i;
for(int j = 0; j < prime.size()&&x >= prime[j]; j++){
if(x%prime[j]==0){
digit[i].push_back(prime[j]);
int t = 0;
while(x%prime[j]==0){
t++;
x /= prime[j];
}
cnt[i].push_back(t);
}
}
if(x!=1){
digit[i].push_back(x);
cnt[i].push_back(1);
}
}
} int main(){
getPrime();
getPhi();
getDigit();
int ncase,T=1;
cin >> ncase;
while(ncase--){
int t1,t2;
scanf("%d%d%d%d%d",&t1,&a,&t2,&b,&gcd);
if(gcd==0){
printf("Case %d: 0\n",T++,ans);
continue;
}else{
if(a > b) swap(a,b);
a /= gcd,b /= gcd;
ans = sum[a];
for(ll i = a+1; i <= b; i++){
int d = digit[i].size();
int t = 0;
vector<int> di;
for(int k = 1; k < (1<<d); k++){
di.clear();
for(int f = 0; f < d; f++){
if(k&(1<<f)){
di.push_back(digit[i][f]);
}
}
int ji = 1;
for(int f = 0; f < di.size(); f++){
ji *= di[f];
}
if(di.size()%2==0){
t -= a/ji;
}else{
t += a/ji;
}
}
ans += a-t;
}
printf("Case %d: ",T++);
cout<<ans<<endl;
} }
return 0;
}
HDU1695-GCD(数论-欧拉函数-容斥)的更多相关文章
- hdu1695(莫比乌斯)或欧拉函数+容斥
题意:求1-b和1-d之内各选一个数组成数对.问最大公约数为k的数对有多少个,数对是有序的.(b,d,k<=100000) 解法1: 这个能够简化成1-b/k 和1-d/k 的互质有序数对的个数 ...
- hdu 1695 GCD(欧拉函数+容斥)
Problem Description Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD( ...
- HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 1695 GCD 欧拉函数+容斥定理
输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1 由于gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和 ...
- hdu 6390 欧拉函数+容斥(莫比乌斯函数) GuGuFishtion
http://acm.hdu.edu.cn/showproblem.php?pid=6390 题意:求一个式子 题解:看题解,写代码 第一行就看不出来,后面的sigma公式也不会化简.mobius也不 ...
- bzoj 2818 GCD 数论 欧拉函数
bzoj[2818]Gcd Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Samp ...
- HDU1695 GCD (欧拉函数+容斥原理)
F - GCD Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- 【bzoj2818】: Gcd 数论-欧拉函数
[bzoj2818]: Gcd 考虑素数p<=n gcd(xp,yp)=p 当 gcd(x,y)=1 xp,yp<=n满足条件 p对答案的贡献: 预处理前缀和就好了 /* http://w ...
- 【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)
题意:问从(0,0)到(x,y)(0≤x, y≤N)的线段没有与其他整数点相交的点数. 解法:只有 gcd(x,y)=1 时才满足条件,问 N 以前所有的合法点的和,就发现和上一题-- [poj 24 ...
随机推荐
- redmine和svn server的部署
作为一个程序猿,想要很好的管理自己项目和代码,我们需要一些工具做辅助. 项目管理工具redmine和代码版本管理工具 SVN(Subversion). 我们选择在虚拟机里面安装windows部署这两套 ...
- ORACLE视图添加备注
ORACLE视图添加备注 版权声明:本文为博主原创文章,未经博主允许不得转载. create or replace view oes_material_series_ref as select t.p ...
- /etc/security/limits.conf 配置
<pre name="code" class="python">* soft nofile 65535 * hard nofile 65535 * ...
- javascript第二课javascript规范
1.javascript严格区分大小写 2.声明变量一律使用var 推断类型 3.每条语句后面加分号 4.字符串使用单引号 5.html代码使用双引号,js用单引号
- spring bean之间的关系:继承;依赖
概要: ' 继承Bean配置 Spring同意继承bean的配置,被继承的bean称为父bean,继承这个父Bean的Bean称为子Bean 子Bean从父Bean中继承配置,包含Bean的属性配置 ...
- Eclipse debug ‘Source not found’
用Eclispe进行Debug时一直被一个问题所困扰:Source not found. 问题产生的原因是调试进入了一个没有源代码的jar包里. 简短说明: Edit Source Lookup Pa ...
- Cocos2d-x 3.0 lua规划 真正的现在Android在响应Home密钥和Back纽带
local listenerKey= cc.EventListenerKeyboard:create() local function onKeyReleaseed(keycode,event) if ...
- xcode KVC:Key Value Coding 键值编码
赋值 // 能修改私有成员变量 - (void)setValue:(id)value forKey:(NSString *)key; - (void)setValue:(id)value forKey ...
- 栈的实现 -- 数据结构与算法的javascript描述 第四章
栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 ...
- ASP.Net中使用Report Service
昨天研究以下Report Service,发现SQL Service自带的报表服务器也非常强大, 一,报表在不同的应用中表现形式 参考:http://www.cnitblog.com/yide/arc ...