从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-容斥原理的更多相关文章

  1. 51nod 1678 lyk与gcd | 容斥原理

    51nod 200题辣ψ(`∇´)ψ !庆祝! 51nod 1678 lyk与gcd | 容斥原理 题面 这天,lyk又和gcd杠上了. 它拥有一个n个数的数列,它想实现两种操作. 1:将 ai 改为 ...

  2. 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 ...

  3. 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) ...

  4. SCUT - 157 - CC和他的GCD - 容斥原理

    https://scut.online/p/157 鉴于多年(都没几个月)搞数论的经验,这种时候枚举g肯定是对的. 那么肯定是要莫比乌斯函数作为因子,因为很显然? 但是为什么要搞个负的呢?其实是因为这 ...

  5. HDU 1695 GCD (欧拉函数+容斥原理)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. HDU1695 GCD (欧拉函数+容斥原理)

    F - GCD Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  7. HDU 1695 GCD (容斥原理+欧拉函数)

    题目链接 题意 : 从[a,b]中找一个x,[c,d]中找一个y,要求GCD(x,y)= k.求满足这样条件的(x,y)的对数.(3,5)和(5,3)视为一组样例 . 思路 :要求满足GCD(x,y) ...

  8. UVa 1393 (容斥原理、GCD) Highways

    题意: 给出一个n行m列的点阵,求共有多少条非水平非竖直线至少经过其中两点. 分析: 首先说紫书上的思路,编程较简单且容易理解.由于对称性,所以只统计“\”这种线型的,最后乘2即是答案. 枚举斜线包围 ...

  9. HDU 1695 GCD(欧拉函数+容斥原理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...

  10. 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( ...

随机推荐

  1. mysqlfrm

    mysqlfrm可基于frm文件生成对应的表结构.常用于数据恢复场景. 其有两种操作模式. 1. 创建一个临时实例来解析frm文件. 2. 使用诊断模式解析frm文件. 以下表进行测试,看看, 1.  ...

  2. c++入门之结构体初步

    结构体实际上是一种数据结构的雏形,对结构体的灵活使用很多时候可以带来很多便利.下面给出一个关于结构体的程序: #include "iostream" # include " ...

  3. PHP实用代码片段(三)

    1. 目录清单 使用下面的 PHP 代码片段可以在一个目录中列出所有文件和文件夹. function list_files($dir) { if(is_dir($dir)) { if($handle ...

  4. MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义

     varchar与char的区别: 1).varchar与char的区别char是一种固定长度的类型,varchar则是一种可变长度的类型 尽可能的使用 varchar 代替 char ,因为首先变长 ...

  5. ES使用C#添加和更新文档

    ElasticSearch 使用C#添加和更新文档 这是ElasticSearch 2.4 版本系列的第四篇: 第一篇:ES1:Windows下安装ElasticSearch 第二篇:ES2:Elas ...

  6. Python并发编程

    进程 相关概念 进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本 ...

  7. 【问题解决方案】Dev C++ 无法调试的问题与解决

    听翁恺老师课的时候用到一个叫DevC++的编辑器. 学到调试部分的时候,老师的没问题我的报错.我?? 试一试网上查到的方法: 工具 --> 编译选项 --> 代码生成/优化 --> ...

  8. 前端三大框架Angular & React & Vue

    前端三大框架: Angular[Google]:一套框架,多种平台移动端 & 桌面端.学会用Angular构建应用,然后把这些代码和能力复用在多种多种不同平台的应用上 —— Web.移动 We ...

  9. Jenkins+Docker自动化集成环境搭

    关于Docker Docker 简介 Docker现在是Github社区最火的项目之一,Docker是个容器,或许你听过lxc,你可能知道Tomcat这个Web容器,容器是什么概念,意会就好.问个问题 ...

  10. 测试python最大递归层次

    转自:https://www.cnblogs.com/xiongdashuai/p/6243372.html python默认的最大递归层数: 运行环境:Windows 7,x64python环境:p ...