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 ...
随机推荐
- ■[iOS] Interface type cannot be statically allocated の原因と対応
iOSでの開発をしていると.表題のエラーが起こる場合があります. 原因 変数の型が静的割り当てになっていることが原因. 対応 変数の型をポインタ型にすると.エラーがなくなります.(変数の前に*をつける ...
- zend framework virtualhost设置方法
Phpunit 的用法 php phpunit.phar 就可以运行phpunit了 修改本地域名vhost F:\Tools\wamp\bin\apache\apache2.4.9\conf\ext ...
- 【Howie玩docker】-windows下玩docker
Windows下安装toolbox一直没成功,于是投机取巧,用虚拟机手工打造玩docker的方法. 步骤: 安装虚拟机,安装centos 在win下建立共享文件夹,假如是 f:/share 在cent ...
- 7.java.lang.IllegalAccessException
java.lang.IllegalAccessException 没有访问权限 当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常.对程序中用了Package的情况下要注意这个 ...
- sketch 跟随鼠标指针移动的特效
演示地址:http://www.ke01.com/yanshi/sucai/20140830/2/ 下载地址:https://yunpan.cn/cqgWeIYPer8eC 访问密码 672b
- 使用TWebBrowser组件保存网页为html和mht文件 收藏
一.保存为HTML文件 uses ActiveX;...procedure WB_SaveAs_HTML(WB : TWebBrowser; const FileName : string) ;var ...
- /etc/security/limits.conf 配置
<pre name="code" class="python">* soft nofile 65535 * hard nofile 65535 * ...
- 怎样在一个页面使多个setInterval函数正常执行
var firstInterval; var secondInterval; function firstAlert(){ if(firstInterval) clearInterval(firstI ...
- 【翻译】在Ext JS 5种使用ViewControllers
原文:Using ViewControllers in Ext JS 5 简单介绍 在Ext JS 5中,在应用程序架构方面提供了一些令人兴奋的改进,如加入了ViewModels.MVVM以及view ...
- 如何解决innnerText的兼容性问题
//获dom对象的innerText的取值 function getInnerText(element) { //判断当前浏览器是否支持innerText if(typeof element.inne ...