HDU1659-GCD-容斥原理
从1-a和1-b种选两个数xy,计算出令gcd(x,y)=k的xy的对数。
对于每一个i∈[1,b]使用solve(i,n)函数解决有几个j∈[1,n]使gcd(x,y)=k。然后累加solve(i,n)-solve(i,i)即可,注意边界情况。
solve函数则使用容斥原理。
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std; const int maxn = ;
int T,a,b,c,d,k;
long long ans;
int prime[maxn]; void init()
{
for(int i=;i<=maxn;i++)
{
if(!prime[i]) prime[++prime[]] = i;
for(int j=;j<=prime[]&&prime[j]<=maxn/i;j++)
{
prime[prime[j]*i] = ;
if(i%prime[j]==) break;
}
}
} int factor[];
int fatCnt; int getFactors(int x)
{
fatCnt = ;
int tmp = x;
for(int i=;prime[i]<=tmp/prime[i];i++)
{
if(tmp%prime[i] == )
{
factor[fatCnt] = prime[i];
while(tmp%prime[i] == )
{
tmp/=prime[i];
//factor[fatCnt] *= prime[i];
}
fatCnt++;
}
}
if(tmp != )
{
factor[fatCnt++] = tmp;
}
return fatCnt;
} long long solve(int x,int n)
{
int np = getFactors(x);
int cnt,lcm;
long long res = n/k; //printf("x=%d n=%d np=%d \n",x,n,np);
for(int i=;i<(<<np);i++)
{
cnt=;lcm=;
int flag = ;
for(int j=;j<fatCnt;j++)
{
if((<<j) & i)
{
lcm *= factor[j];
cnt++;
}
}
lcm *= k;
cnt++; if(cnt&)
res += n/lcm;
else
res -= n/lcm;
}
//printf("res=%d\n",res);
return res;
} int main()
{
scanf("%d",&T);
init();
for(int kase=;kase<=T;kase++)
{
scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
printf("Case %d: ",kase);
if(k == ) {printf("0\n");continue;}
if(d > b) swap(d,b); ans = ;
for(int i=c;i<=d;i++) if(i%k == )
{
ans += (solve(i/k,b)-solve(i/k,i));
if(i == k) ans++;
}
printf("%lld\n",ans);
}
}
HDU1659-GCD-容斥原理的更多相关文章
- 51nod 1678 lyk与gcd | 容斥原理
51nod 200题辣ψ(`∇´)ψ !庆祝! 51nod 1678 lyk与gcd | 容斥原理 题面 这天,lyk又和gcd杠上了. 它拥有一个n个数的数列,它想实现两种操作. 1:将 ai 改为 ...
- HDU 1695 GCD#容斥原理
http://acm.hdu.edu.cn/showproblem.php?pid=1695 翻译题目:给五个数a,b,c,d,k,其中恒a=c=1,x∈[a,b],y∈[c,d],求有多少组(x,y ...
- hdu1695 GCD 容斥原理
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) ...
- SCUT - 157 - CC和他的GCD - 容斥原理
https://scut.online/p/157 鉴于多年(都没几个月)搞数论的经验,这种时候枚举g肯定是对的. 那么肯定是要莫比乌斯函数作为因子,因为很显然? 但是为什么要搞个负的呢?其实是因为这 ...
- HDU 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU1695 GCD (欧拉函数+容斥原理)
F - GCD Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- HDU 1695 GCD (容斥原理+欧拉函数)
题目链接 题意 : 从[a,b]中找一个x,[c,d]中找一个y,要求GCD(x,y)= k.求满足这样条件的(x,y)的对数.(3,5)和(5,3)视为一组样例 . 思路 :要求满足GCD(x,y) ...
- UVa 1393 (容斥原理、GCD) Highways
题意: 给出一个n行m列的点阵,求共有多少条非水平非竖直线至少经过其中两点. 分析: 首先说紫书上的思路,编程较简单且容易理解.由于对称性,所以只统计“\”这种线型的,最后乘2即是答案. 枚举斜线包围 ...
- HDU 1695 GCD(欧拉函数+容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...
- 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( ...
随机推荐
- python中join()函数的使用方法
函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字 ...
- python面向对象(封装、继承、多态)+ 面向对象小栗子
大家好,下面我说一下我对面向对象的理解,不会讲的很详细,因为有很多人的博客都把他写的很详细了,所以,我尽可能简单的通过一些代码让初学者可以理解面向对象及他的三个要素. 摘要:1.首先介绍一下面向对象 ...
- 朱晔的互联网架构实践心得S1E4:简单好用的监控六兄弟
朱晔的互联网架构实践心得S1E4:简单好用的监控六兄弟 [下载本文PDF进行阅读] 这里所说的六兄弟只指ELK套件(ElasticSearch+Logstash+Kibana)以及TIG套件(Tele ...
- Flask的蓝图和红图
1.蓝图 对于简单的项目来说,比如项目就只有一个user模块,我们可以都将视图函数定义在一个文件里面,不需要用到蓝图. 但是如果我们的项目有多个模块,如下有v1模块,v2模块.....等,那么如果我们 ...
- Windows下如何更新 CodeBlocks 中的 MinGW 使其支持新版本 C++
转自:http://blog.csdn.net/wtfmonking/article/details/17487705 虽然 CodeBlocks16.01 已经是最新版了,但其中的 MinGW 仍然 ...
- H5 68-伪元素选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MySQL中myisam与innodb的区别
1. myisam与innodb的5点不同 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MV ...
- stark组件数据库管理软件的总结
1.stark - 总结 用到的知识点: 1.单例模式 2.继承 3.反射 4.面向对象 5.modelform 1.注册表 单例模式 site = StarkSite() 2.生成url url ...
- 2019省赛训练组队赛3.31周四-17fj
https://vjudge.net/contest/289558#overview A - Frog Therearex frogs and y chicken in a garden. Kim f ...
- syncthing 多主机同步文件工具
周五看了下阮一峰的blog 看到有一个 syncthing的小工具挺好用的 进行了简单的尝试: 1. 下载文件位置: https://syncthing.net 2. 下载文件后的简单安装 绿色版直接 ...