题意:求1-b和1-d之内各选一个数组成数对。问最大公约数为k的数对有多少个,数对是有序的。(b,d,k<=100000)

解法1: 这个能够简化成1-b/k 和1-d/k 的互质有序数对的个数。

如果b=b/k。d=d/k,b<=d.欧拉函数能够算出1-b与1-b之内的互质对数。然后在b+1到d的数i,求每一个i在1-b之间有多少互质的数。

解法是容斥,getans函数參数的意义:1-tool中含有rem位置之后的i的质因子的数的个数。

for(int j=rem;j<=factor[i][0];j++)ans+=tool/factor[i][j]-getnum(i,tool/factor[i][j],j+1);

这个循环中。ans加的等号后每项表示当前最大的质因子是factor[i][j]的数量,目的是去重。

解法2:莫比乌斯,莫比乌斯数组确实非常实用。事实上也非常easy,mou的位置的含义是,首先假设i有个质因子出现2次或以上。则mou值为0,否则1与-1跟i的质因子奇偶性决定。目的也是容斥。

解法1代码:

/******************************************************
* @author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <string.h>
//freopen ("in.txt" , "r" , stdin);
using namespace std;#define eps 1e-8
#define zero(_) (abs(_)<=eps)
const double pi=acos(-1.0);
typedef long long LL;
const int Max=100010;
const LL INF=0x3FFFFFFF;
int a, b, c, d, k;
int factor[Max][20];
bool rem[Max];
LL oular[Max];
void init()
{for(int i=1; i<Max; i++)oular[i]=i;for(LL i=2; i<Max; i++){if(!rem[i]){factor[i][++factor[i][0]]=i;oular[i]=i-1;for(LL j=i*2; j<Max; j+=i){factor[j][++factor[j][0]]=i;rem[j]=1;oular[j]=oular[j]*(i-1)/i;}}}for(int i=1; i<Max; i++)oular[i]=oular[i]+oular[i-1];
}
LL getnum(int i,int tool,int rem)
{int ans=0;for(int j=rem;j<=factor[i][0];j++)ans+=tool/factor[i][j]-getnum(i,tool/factor[i][j],j+1);return ans;
}
int main()
{int t;cin>>t;init();int kk=1;while(t--){cin>>a>>b>>c>>d>>k;printf("Case %d: ",kk++);if(k==0){cout<<"0\n";continue;}b/=k;d/=k;if(b>d)swap(b,d);LL ans=oular[b];for(int i=b+1;i<=d;i++){ans+=b-getnum(i,b,1);}cout<<ans<<endl;}return 0;
}

解法2代码:

/******************************************************
* @author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <string.h>
//freopen ("in.txt" , "r" , stdin);
using namespace std;#define eps 1e-8
#define zero(_) (abs(_)<=eps)
const double pi=acos(-1.0);
typedef long long LL;
const int Max=100010;
const LL INF=0x3FFFFFFF;
int a, b, c, d, k;
bool rem[Max];
int mou[Max];
void init()
{mou[1]=1;for(LL i=2; i<Max; i++){if(!rem[i]){mou[i]=i;for(LL j=i*2; j<Max; j+=i){rem[j]=1;mou[j]=i;}}}for(int i=2; i<Max; i++){if(i/mou[i]%mou[i]==0) mou[i]=0;else mou[i]=-mou[i/mou[i]];}
}
int main()
{int t;cin>>t;init();int kk=1;while(t--){cin>>a>>b>>c>>d>>k;printf("Case %d: ",kk++);if(k==0){cout<<"0\n";continue;}b/=k;d/=k;if(b > d)swap(b,d);long long ans1 = 0;for(int i = 1; i <= b; i++)ans1 += (long long)mou[i]*(b/i)*(d/i);long long ans2 = 0;for(int i = 1; i <= b; i++)ans2 += (long long)mou[i]*(b/i)*(b/i);ans1 -= ans2/2;cout<<ans1<<endl;}return 0;
}

hdu1695(莫比乌斯)或欧拉函数+容斥相关推荐

  1. 莫比乌斯,欧拉函数题目练习(完结)

    Starttime:2020/11/16Start\ time:2020/11/16Start time:2020/11/16 Lastupdatetime:2020/11/28Last\ updat ...

  2. G. GCD Festival(莫比乌斯、欧拉函数)

    G. GCD Festival ∑i=1n∑j=1ngcd⁡(ai,aj)gcd⁡(i,j)∑d=1nd∑i=1nd∑j=1ndgcd⁡(aid,ajd)[gcd⁡(i,j)=1]∑d=1nd∑k=1 ...

  3. 欧拉函数的一道练习题(附加容斥做法)

    jzd同学今天告诉了我们一道关于欧拉函数的题,一开始觉得毫无头绪,当身旁的erge同学切完开始装(xiao)逼(zhang)的时候,他无意间透露的欧拉函数四个字启发了我,最近做了一道很相似的题HDU1 ...

  4. 欧拉函数+狄利克雷卷积+莫比乌斯函数+莫比乌斯反演+整除分块+杜教筛

    Powered by:NEFU AB-IN 文章目录 欧拉函数 狄利克雷卷积 莫比乌斯函数 莫比乌斯反演 P3455 [POI2007]ZAP-Queries 整除分块 P2522 [HAOI2011 ...

  5. Comet OJ - Contest #8 E神奇函数(莫比乌斯函数容斥)

    Comet OJ - Contest #8 E神奇函数(莫比乌斯函数容斥) 题目大意 定义d(x)d(x)d(x)的值为x的最小素因子,定义 f(x)={1x=1d(x)f(xd2(x))x>1 ...

  6. Educational Codeforces Round 81 (Rated for Div. 2) D. Same GCDs 欧拉函数\莫比乌斯

    传送门 文章目录 题意: 思路: 题意: 给定a,ma,ma,m,求满足gcd(a,m)=gcd(a+x,m)gcd(a,m)=gcd(a+x,m)gcd(a,m)=gcd(a+x,m)的xxx的个数 ...

  7. nssl1232-函数【数论,欧拉函数,莫比乌斯反演】

    正题 题目大意 ∑d∣nf(d)=n\sum_{d|n}f(d)=nd∣n∑​f(d)=n 对于n个aia_iai​ 求 ∑i=1nf(ai)\sum_{i=1}^nf(a_i)i=1∑n​f(ai​ ...

  8. 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)

    [目录] 一.素数筛 1.素数判断 2.素数普通筛 3.素数线性筛 4.素数区间筛 二.欧拉函数筛 三.莫比乌斯函数筛 [素数筛] 1.直接判定质数 bool judgePrime( int num ...

  9. matlab狄利克雷函数,数论入门1——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛...

    数论入门1 一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数$\mu(n)$为: 当n有平方因子时,$\mu(n)=0$. 当n没有平方因子时,$\mu(n)=(-1)^{\omega(n)} ...

最新文章

  1. 铃木dl250参数_铃木DL250,铃木GSX250,铃木GW250重量多少?哪款最值得买?
  2. Error:(108) No resource identifier found for attribute #39;style#39; in package #39;android#39;
  3. 解决Redis服务错误一例听语音
  4. linux中mount -o remount /home,mount -o remount, rw / 很有用..
  5. libsvm回归参数寻优cgp_【lightgbm/xgboost/nn代码整理二】xgboost做二分类,多分类以及回归任务...
  6. java原生的ajax怎么写_原生Ajax代码实现
  7. KVM,QEMU,libvirt入门学习笔记【转】
  8. CMS4.0——后知后觉
  9. 如何将CAD图纸在线转换成JPG图片格式
  10. 皮尔逊相关系数_皮尔逊相关系数(Person)
  11. 丹麦为啥能成为“养猪王国”与“养猪强国”
  12. 多线程读文本写入OracleNoSQL数据库
  13. 互动媒体技术——processing旋转方块(不同角度的旋转)
  14. 电赛笔记【数模转换原理】
  15. itext生成pdf加页码和总页码
  16. 坚持不懈2 android游戏,坚持不懈的赛跑者
  17. 什么是 数据,数据库,数据库管理系统,数据库系统?
  18. 数据库系统原理与设计——投影运算、选择运算
  19. FFmpeg命令行将mp3/wav/flac/ape转pcm
  20. HTML5网页设计常用标记-图像标记

热门文章

  1. 写给Linux系统运维的朋友
  2. ==和equals的浅析
  3. 超简单破解网页加密源代码
  4. CSLA.Net 3.0.5 项目管理示例 名值列表基类、只读基类、业务负责人基类
  5. VS2005 和 SQL Server 2005 安装顺序不同会发生什么?
  6. 前端console log之坑。。。
  7. C#3.0-新增加功能浅析(1)
  8. Eclipse删除文件的恢复(转)
  9. JWT简介json web token bear token
  10. 《潮流时装设计——世界顶级时装CAD制板技巧》——1.6 服装生产中各部位国际代号...