莫比乌斯反演第二弹 入门 Coprime Integers Gym - 101982B
题目链接:https://cn.vjudge.net/problem/Gym-101982B
题目大意: 给你(a,b)和(c,d)这两个区间,然后问你这两个区间中互素的对数是多少.
具体思路:和我上一篇写莫比乌斯入门的博客的思路一样,不过就是加了下限,原来的那一篇的下限是1,现在这一篇的下限是题目给的数.所以这一块就需要考虑到去重.
第一步,我们首先确定一个较小的区间,假设让第一个区间是上限最小的,然后我们当前就有两个区间(a,b)和(c,d) 此时(b<d).
我们首先算(1,b)和(1,d)中满足情况的对数.然后这中间就会有一部分不符合条件的,( 1 , a )和 (1, d )这块的不符合, (1,c)和 (1,d)这个区域也是多算上的,但是,如果讲这两部分都给删掉的话,那么 (1,a)和(1,c)这个区域就会被删去两遍,所以需要再加上一遍.
AC代码:
#include<iostream>
#include<cmath>
#include<string>
#include<algorithm>
#include<cstring>
#include<stdio.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn =10000000+100;
# define ll long long
ll mu[maxn];
ll vis[maxn];
ll prim[maxn];
void Get_mu(ll n)
{
mu[1]=1;
int cnt=0;
for(ll i=2; i<n; i++)
{
if(!vis[i])
{
prim[cnt++]=i;
mu[i]=-1;
}
for(ll j=0; j<cnt; j++)
{
ll k=i*prim[j];
if(k>n)break;
vis[k]=1;
if(i%prim[j])
{
mu[k]=-mu[i];
}
else
{
mu[k]=0;
break;
}
}
}
}
int main()
{
Get_mu(maxn);
int a,b,c,d;
cin>>a>>b>>c>>d;
ll ans=0;
if(b>d){
swap(a,c);
swap(b,d);
}// 注意如果交换的都需要交换.
for(int i=1; i<=b; i++)
{
ans+=mu[i]*(b/i)*(d/i);
}
for(int i=1; i<=a-1; i++)
{
ans-=mu[i]*((a-1)/i)*(d/i);
}
for(int i=1; i<=c-1; i++)
{
ans-=mu[i]*((c-1)/i)*(b/i);
}
int temp=min(a,c);
for(int i=1; i<=temp-1; i++)
{
ans+=mu[i]*((a-1)/i)*((c-1)/i);
}
cout<<ans<<endl;
return 0;
}
莫比乌斯反演第二弹 入门 Coprime Integers Gym - 101982B的更多相关文章
- 【容斥原理,莫比乌斯反演】用容斥替代莫比乌斯反演第二种形式解决gcd统计问题
名字虽然很长.但是其实很简单,对于这一类问题基本上就是看你能不能把统计的公式搞出来(这时候需要一个会推公式的队友) 来源于某次cf的一道题,盼望上紫的我让潘学姐帮我代打一道题,她看了看跟我说了题解,用 ...
- nyoj CO-PRIME 莫比乌斯反演
CO-PRIME 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 This problem is so easy! Can you solve it? You are ...
- 【CodeForces】915 G. Coprime Arrays 莫比乌斯反演,前缀和,差分
Coprime Arrays CodeForces - 915G Let's call an array a of size n coprime iff gcd(a1, a2, ..., *a**n) ...
- gym 101982 B题 Coprime Integers
题目链接:https://codeforces.com/gym/101982/attachments 贴一张图吧: 题目意思就是给出四个数字,a,b,c,d,分别代表两个区间[a,b],[c,d],从 ...
- 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)
[51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...
- 【CodeForces】915 G. Coprime Arrays 莫比乌斯反演
[题目]G. Coprime Arrays [题意]当含n个数字的数组的总gcd=1时认为这个数组互质.给定n和k,求所有sum(i),i=1~k,其中sum(i)为n个数字的数组,每个数字均< ...
- BZOJ 2301 莫比乌斯反演入门
2301: [HAOI2011]Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函 ...
- CF915G Coprime Arrays (莫比乌斯反演)
CF915G Coprime Arrays 题解 (看了好半天终于看懂了) 我们先对于每一个i想,那么 我们设 我们用莫比乌斯反演 有了这个式子,可比可以求出△ans呢?我们注意到,由于那个(i/d) ...
- hdu 1695 GCD 莫比乌斯反演入门
GCD 题意:输入5个数a,b,c,d,k;(a = c = 1, 0 < b,d,k <= 100000);问有多少对a <= p <= b, c <= q <= ...
随机推荐
- Vue父组件与子组件传递事件/调用事件
1.Vue父组件向子组件传递事件/调用事件 <div id="app"> <hello list="list" ref="child ...
- angularjs 常用功能练习
<!DOCTYPE html> <html ng-app="app"> <head> <meta charset="utf-8& ...
- 【.Net】C#获取Windows系统特殊文件夹的路径
系统特殊文件夹是包含公共信息的文件夹,如“Program Files”.“Programs”.“System”或“Startup”.特殊文件夹在默认情况下由系统设置,或者由用户在安装 Windows ...
- HDU4786_Fibonacci Tree
题目很新颖的,略带智商,很好. 题目的意思是给你一些白色边和黑色边,现在问你能否用两色边构造出一颗生成树,且树中白色边的数量为一个Fibonacci数. 其实在没做题目之前我就已经听说了这个题目的解题 ...
- 【刷题】洛谷 P3808 【模板】AC自动机(简单版)
题目背景 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 管理员提示:本题数据内有重复的单词,且重复单词应该计算多次, ...
- Sort Integers
) algorithm. 分析 bubble sort 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class Solution ...
- 安装cacti监控系统
1 安装snmp [root@xxxx ~]# yum -y install net-snmp* 2 安装rddtool 3 创建数据库 cacti, 导入 cd xx/cacti/cacti.sql ...
- 【数学】【P5077】 Tweetuzki 爱等差数列
Description Tweetuzki 特别喜欢等差数列.尤其是公差为 \(1\) 且全为正整数的等差数列. 显然,对于每一个数 \(s\),都能找到一个对应的公差为 \(1\) 且全为正整数的等 ...
- oracle中建立job(任务)
--Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...
- jq从数组中删除指定元素(根据自定义条件) 超好用的 $.grep() 方法
转: jQuery.grep() 什么是jQuery.grep()? jQuery.grep()是一个查找满足过滤函数的数组元素的函数.原始数组不受影响,返回值为数组. 用法介绍: 写法: jQuer ...