hdu-4135 Co-prime---容斥定理经典&&求1-m中与n互质的数目
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4135
题目大意:
求区间[a, b]中与N互质的数目。
解题思路:
首先对n求出所有素因子。
对于区间[1, m]中,只需要对n素因子求出所有子集,就可以求出所有的与n不互质的数目num,那么互质的数就是m-num;
对于区间[a, b],就等于[1, b]的数目 - [1,a - 1]的数目。
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + ;
ll a[], tot;
ll gcd(ll a, ll b)
{
return b == ? a : gcd(b, a % b);
}
void init(ll n)//求出n的素因子
{
tot = ;
for(ll i = ; i * i <= n; i++)
{
if(n % i == )
{
a[tot++] = i;
while(n % i == )n /= i;
}
}
if(n != )a[tot++] = n;
}
ll sum(ll m)//求[1, m]中与n互质的个数
{
ll ans = ;
for(int i = ; i < ( << tot); i++)//a数组的子集
{
ll num = ;
for(int j = i; j; j >>= )if(j & )num++;//统计i的二进制中1的个数
ll lcm = ;
for(int j = ; j < tot; j++)
if(( << j) & i)
{
lcm = lcm / gcd(lcm, a[j]) * a[j];
if(lcm > m)break;
}
if(num & )ans += m / lcm;//奇数加上
else ans -= m / lcm;//偶数减去
}
return m - ans;
}
ll n, l, r;
int main()
{
int T, cases = ;
cin >> T;
while(T--)
{
cin >> l >> r >> n;
init(n);
cout<<"Case #"<<++cases<<": "<<sum(r) - sum(l - )<<endl;
}
return ;
}
hdu-4135 Co-prime---容斥定理经典&&求1-m中与n互质的数目的更多相关文章
- 题解报告:hdu 4135 Co-prime(容斥定理入门)
Problem Description Given a number N, you are asked to count the number of integers between A and B ...
- HDU 4135 Co-prime(容斥+数论)
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 1695 GCD(容斥定理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU 4135 Co-prime(容斥:二进制解法)题解
题意:给出[a,b]区间内与n互质的个数 思路:如果n比较小,我们可以用欧拉函数解决,但是n有1e9.要求区间内互质,我们可以先求前缀内互质个数,即[1,b]内与n互质,求互质,可以转化为求不互质,也 ...
- HDU5768Lucky7(中国剩余定理+容斥定理)(区间个数统计)
When ?? was born, seven crows flew in and stopped beside him. In its childhood, ?? had been unfortun ...
- HDU 4135 Co-prime 欧拉+容斥定理
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU - 4135 Co-prime 容斥定理
题意:给定区间和n,求区间中与n互素的数的个数, . 思路:利用容斥定理求得先求得区间与n互素的数的个数,设表示区间中与n互素的数的个数, 那么区间中与n互素的数的个数等于.详细分析见求指定区间内与n ...
- HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 2841 Visible Trees(容斥定理)
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
随机推荐
- 推荐系统(Recommender System)
推荐系统(Recommender System) 案例 为用户推荐电影 数据展示 Bob Tom Alice Jack 动作成分 浪漫成分 Movie1 5 ? 0 3 ? ? Movie2 ? 0 ...
- java并发编程(3)避免活跃性危险
活跃性危险 一.死锁 发生:每个人都不愿意放弃自己的锁,确想要别人的锁,这就会导致死锁 1.锁顺序死锁:如果每个线程以固定的顺序获取锁,那么至少在程序中不会出现锁顺序导致的死锁: 因为顺序固定如:所 ...
- 特殊引用类型(string)
private string FuncWithParameters(int param1, String param2, List<string> param3) { // 我们在这里改变 ...
- web.coofig 配置跨域问题
<customHeaders> <add name="/> <add name="Access-Control-Allow-Origin" ...
- mongodb操作之mongoose
/** * Created by chaozhou on 2015/10/6. */ var mongoose = require("mongoose"); var db = mo ...
- [javaEE] javaweb的mvc设计思想
Servlet:在Servlet中拼接html内容 JSP:在html中拼接java JSP+JavaBean:利用javaBean将大量的代码提取走 Servlet+JSP+JavaBean:Ser ...
- forward和redirect请求方式
之前一直对forward和redirect有点疑问,现在练习一下加深点记忆,理解理解,forward是一次请求,在一个request范围内,而redirect是二次请求 实例: @Controller ...
- python 之 os._exit() sys.exit() 、exit()
sys.exit 执行该语句会直接退出程序,这也是经常使用的方法,也不需要考虑平台等因素的影响,一般是退出Python程序的首选方法. 退出程序引发SystemExit异常,(这是唯一一个不会被认为是 ...
- LinearLayout中的android:layout_garvity的center_vertical和center_horizontal
当LinearLayout的排列方向是 horizontal时,只有垂直方向上的对齐方式才会生效.因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对 ...
- javascript闭包中循环问题
如下的html,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5. <html > <head> <meta http-equiv=&quo ...