[HDU 4135]Co-prime:容斥原理

HDU - 4135 Co-prime (容斥原理典型题) 题目描述:点击打开链接题意给定一个区间[a,b],求区间内有少个数与n互质。题意很简单但是不是很好处理,a,b的数据范围很大,肯定不能够直接遍历,欧拉函数也不很好解决这个问题,我们把这个问题转换一下,互质的数是没有规律可循的,只能一个一个找,但是不互质的数就不一样了,如果将n因式分解,假设可以得到三个因子p1,p2,p3的话,那么p1,p2,p3的倍数肯定是与n不互质的,而n以内一个数的倍数的个数... 阅读详情

点击这里查看原题

问题可以转化成求[1,x]中与n互质的数的个数,则答案为cal(1,b)-cal(1,a-1),现在的问题就是如何去求cal(1,x)
这个需要用到容斥原理,对n进行质因数分解,然后减去[1,x]中有含有一个质因数的数的个数,加上含有两个质因数的数的个数,减去三个……,以此类推,得到答案

/*
User:Small
Language:C++
Problem No.:4135
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
ll a,b,n,pri[1005];
int tot;
ll cal(ll x){
    ll res=x;
    for(ll i=1;i<((ll)1<<tot);i++){
        int cnt=0;
        ll tmp=1;
        for(int j=0;j<tot;j++){
            if((i>>j)&1){
                cnt++;
                tmp*=pri[j+1];
            }
        }
        res+=x/tmp*(cnt%2?-1:1);
    }
    return res;
}
int main(){
    freopen("data.in","r",stdin);//
    int t;
    cin>>t;
    for(int i=1;i<=t;i++){
        tot=0;
        cin>>a>>b>>n;
        for(ll j=2;j*j<=n;j++){
            if(n%j==0){
                pri[++tot]=j;
                while(n%j==0) n/=j;
            }
        }
        if(n!=1) pri[++tot]=n;
        cout<<"Case #"<<i<<": "<<cal(b)-cal(a-1)<<endl;
    }
    return 0;
}
HDU---4135Co-prime容斥原理 Description Given a number N, you are asked to count the number of integers between A and B inclusive which are relatively prime to N. Two integers are said to be co-prime or relatively prime if they... 阅读详情

相关推荐

HDU 4135Co-prime容斥原理

Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4289    Accepted Submission(s): 1698 Problem Description Given a number N,

小坏蛋_千千 679

HDU - 4135 Co-prime (容斥原理 求 1-n 与 k互质的数的个数模板)

HDU - 4135 Co-prime (容斥原理 求 1-n 与 k互质的数的个数模板) Given a number N, you are asked to count the number of integers between A and B inclusive which are relatively prime to N. Two integers are said to be co-...

weixin_43179892的博客 389

容斥原理HDU-4135Co-prime

容斥原理公式:这里就需要用到容斥原理了,公式就是:n/2+n/3+n/5-n/(2*3)-n/(2*5)-n/(3*5)+n/(2*3*5). 求的是多个重合区间的里面的数字个数。 解题心得: 1、一开始很傻很天真,使用遍历然后调用__gcd()来直接怼,但是肯定要超时啊,a,b的范围太大了。 2、求一个数与另一个数是否互质还有一种算法,看这个数...

weixin_30869099的博客 114

HDU 4135Co-prime 容斥原理求(1,m)中与n互质的数的个数

Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 121    Accepted Submission(s): 56 Problem Description Given a number N, you ar

duanxian0621的专栏 6002

hdu 4135 Co-prime(容互原理 DFS+位运算求解)

hdu 4135 Co-primeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6051 Accepted Submission(s): 2411Problem Description Given a number N, you

AixsCode 311

HDU 4135Co-prime求(1,m)中与n互质的数的个数(容斥原理&&二进制)

题意: 求 a到b的数中与n互质的数的个数 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; using namespace std; #define LL long long #define maxn 70 LL prime[maxn]; LL make_ans(LL num,int m)//1到...

lanshan1111的博客 401

HDU 4135Co-prime求(1,m)中与n互质的数的个数(容斥原理&&队列实现)

题意: 求 a到b的数中与n互质的数的个数 #include &lt;cstdio&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;cstring&gt; #include &lt;vector&gt; #include &lt;queue&gt; #include &lt;set&gt; #defin

lanshan1111的博客 459

HDU 4135 Co-prime 区间内与n互质的个数 容斥(入门

题目链接:点击打开链接 题意:给定区间[l, r] 询问区间内有多少个数和n互质 思路: solve(x) 表示[1,x]区间内与n互质的个数,则ans = solve(r)-solve(l-1); 与n互质的个数=所有数-与n不互质的数=所有数-(与n有一个因子-与n有2个因子的+与n有3个因子的) 状压n的因子个数,然后根据上面的公式容斥得到。 #include

九野的博客 1283

HDU4135 Co-prime容斥原理】3方法

Problem Description Given a number N, you are asked to count the number of integers between A and B inclusive which are relatively prime to N. Two integers are said to be co-prime or relatively pr

深海沧澜的博客 1759

HDU4135 - Co-prime容斥原理

点击打开题目 Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3495    Accepted Submission(s): 1381 Problem Description Giv

wyg1997 1723

HDU 4135 Co-prime

HDU 4135 Co-prime 传送门题意给出一个区间的左右端点,再给出区间里的一个数,然后需要求出在区间中有几个数与给定的数互素。思路暴力求解肯定是过不去的,会超时,这里需要利用容斥原理。假设当前m=12,n=10。第一步:求出给出数的质因子:2,3,5;第二步:(1,m)中是n的因子的倍数当然就不互质了(2,4,6,8,10)->n2\dfrac{n}{2} 6个,(3,6,9,12)->

obsidian的博客 243

HDU 4135 Co-prime (容斥原理, 数学)

HDU 4135 Co-prime (容斥原理, 数学)

974

HDU 4135 Co-prime 详解 容斥原理

这道题我们需要使用到的是容斥原理容斥原理分为三种实现1: 1.位运算与二进制枚举(容易理解) 2.队列数组(耗时最短) 3.递归(代码最短但不容易理解)

Curren的博客 679

hdu 4135_Co-prime(容斥原理)

/*  hdu 4135(容斥原理) Hot~~招聘——亚信科技,巴卡斯(杭州),壹晨仟阳(杭州),英雄互娱(杭州) (包括2016级新生)除了校赛,还有什么途径可以申请加入ACM校队? Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S

持之以恒_fighting 404

HDU-4135-Co-prime(容斥)

HDU-4135-Co-prime 传送门 这道题是容斥~ 题目大意:给你一个区间[a, b],和一个数n,让你求区间[a, b]范围内的与n互质的数有多少个。 解题思路:我们看看数据范围,a和b的区间范围达到了1e15,n的数据范围达到了1e9。t次询问范围在100以内。 我们把这道题的思路与前缀和结合起来想一想。求区间[a, b]与n互质的数字,那我们转化成求[1, b]区间与 暴力肯定是不行...

qq_44624316的博客 233

容斥原理HDU 4135 Co-prime

http://acm.hdu.edu.cn/showproblem.php?pid=4135 题意:求[a,b]中与n互质的数的个数 ans=sum(b)-sum(a-1),sum(a)表示[1,a]中与n互质的数的个数 问题转化为求[1,a]中与n互质的数的个数 可求[1,a]中与n不互质的数的个数μ,即[1,a]中n的因数,再用a减去即得sum(a) 算出n的

F丶轩 825

Co-prime

http://acm.hdu.edu.cn/showproblem.php?pid=4135 Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2481    Accepted Submission(s):

ACcoders 733
上一篇: [HDU 5213]Lucky:莫队+容斥原理
下一篇: [HDU 1796]How many integers can you find:容斥原理
BrooksBUAA
博客等级 码龄10年 11粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值