[容斥原理] hdu 4135 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): 1176 Accepted Submission(s): 427
Two integers are said to be co-prime or relatively prime if they have no common positive divisors other than 1 or, equivalently, if their greatest common divisor is 1. The number 1 is relatively prime to every integer.
1 10 2
3 15 5
Case #2: 10
In the first test case, the five integers in range [1,10] which are relatively prime to 2 are {1,3,5,7,9}.
题目意思:
给一个a,b,n求在[a,b]内有多少个与n互质的数。
解题思路:
简单的容斥原理。
反面思考。先求出与n不互质的,也就是包括n的质因数的。然后就能够想到先把n分解质因数。
然后能够想到先预处理1000000内的质数。
然后求出1~b满足要求的个数,减去1~a-1满足要求的个数,答案即为最后结果。
代码:
//#include<CSpreadSheet.h>
#include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#include<cmath>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#define M 1000000007
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
#define N 1000000
int prime[130000],cnt;
bool isprime[N+10];
int pp[110000],cnt0;
ll a,b,n,ans1,ans2;
void init() //预处理出1~1000000内的质数
{
cnt=0;
for(int i=1;i<=N;i++)
isprime[i]=true;
for(int i=2;i<=N;i++)
{
if(!isprime[i])
continue;
prime[++cnt]=i;
for(int j=i*2;j<=N;j+=i)
isprime[j]=false;
}
//printf("cnt:%d\n",cnt);
}
void Cal(ll cur) //分解出cur的质因数
{
cnt0=0;
for(int i=1;prime[i]*prime[i]<=cur;i++)
{
if(cur%prime[i]==0)
{
pp[++cnt0]=prime[i];
while(!(cur%prime[i]))
cur/=prime[i];
}
}
if(cur!=1)
pp[++cnt0]=cur;
}
void dfs(ll hav,int cur,int num) //容斥原理求出互质的
{
if(cur>cnt0||(hav>a&&hav>b))
return ;
for(int i=cur;i<=cnt0;i++)
{
ll temp=hav*pp[i];
if(num&1)
{
ans1-=b/temp;
ans2-=a/temp;
}
else
{
ans1+=b/temp;
ans2+=a/temp;
}
dfs(temp,i+1,num+1);
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
init();
//system("pause");
int t;
scanf("%d",&t);
for(int ca=1;ca<=t;ca++)
{
scanf("%I64d%I64d%I64d",&a,&b,&n);
Cal(n);
//printf("cnt0:%d\n",cnt0);
a--;
ans1=b,ans2=a;
for(int i=1;i<=cnt0;i++)
{
ans1-=b/pp[i];
ans2-=a/pp[i];
dfs(pp[i],i+1,2);
}
printf("Case #%d: %I64d\n",ca,ans1-ans2);
}
return 0;
}
[容斥原理] hdu 4135 Co-prime的更多相关文章
- HDU 4135 容斥
问a,b区间内与n互质个数,a,b<=1e15,n<=1e9 n才1e9考虑分解对因子的组合进行容斥,因为19个最小的不同素数乘积即已大于LL了,枚举状态复杂度不会很高.然后差分就好了. ...
- hdu 4135 Co-prime (素数打表+容斥原理)
题目链接 题意:问从A到B中与N互素的个数. 题解: 利用容斥原理:先求出与n互为素数的个数. 可以先将 n 进行素因子分解,然后用区间 x 除以 素因子,就得到了与 n 的 约数是那个素因子的个数, ...
- 容斥原理学习(Hdu 4135,Hdu 1796)
题目链接Hdu4135 Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 4135 Co-prime(容斥原理)
Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...
- HDU 4135 容斥原理
思路: 直接容斥 //By SiriusRen #include <cstdio> using namespace std; #define int long long ; int cas ...
- HDU 4135
http://acm.hdu.edu.cn/showproblem.php?pid=4135 求[A,B]内与N互素的数字个数 首先对N分解质因数,对于一个质因数,1-n与它不互素的数字个数是n/(这 ...
- 容斥 - HDU 4135 Co-prime
Co-prime Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4135 推荐: 容斥原理 Mean: 给你一个区间[l,r]和一 ...
- hdu 5901 count prime & code vs 3223 素数密度
hdu5901题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5901 code vs 3223题目链接:http://codevs.cn/problem ...
- hdu 4135 Co-prime(容斥)
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
随机推荐
- 线程 线程池 Task
首先声明 这是读了 愉悦的绅士 文章 <菜鸟之旅——学习线程(线程和线程池)> <Task与线程> 的一些个人总结,还是那句话,如有不对,欢迎指正 文章以代码加注释的方法展示. ...
- memcache 相关
1.查看memcache是否启动 ps -ef | grep mem
- 2; HTML 基本结构
1. HTML 的基本结构 2. HTML 控制标记的格式 3. 最常用的控制标记 本章讲解最基本的 HTML 元素,也就是创建文档结构所需的元素.例如:标题.段落. 页面分隔.注释等等. 2.1 H ...
- angular 拼接html 事件无效
主要是要引用$compile方法
- GitHub for Windows离线安装包
国内安装github客户端,真的很痛!! 偶然找到了离线安装包,感谢作者的资源分享!!! 地址:http://download.csdn.net/download/lyg468088/8723039? ...
- 正则去除html字符串中的注释、标签、属性
var str = '<!-- 注释1 --><h1 style="color:#00ff00;text-align: center;">ProsperLe ...
- 安装docker17.06.0版本报错和解决方法
本人在自己电脑的虚拟机里安装docker ce 17.06.0版本的时候报如下错误: [root@manager2 yum.repos.d]# yum install docker-ce-17.06. ...
- Html富文本编辑器
本文推荐两款简单的富文本编辑器[KindEditor,NicEdit]用于获得所见即所得的编辑效果,本文仅供学习分享使用,如有不足之处,还请指正. 概述 这两款编辑器都是采用JavaScript编写, ...
- 图说Oracle基础知识(一)
本文主要对Oralce数据库操作的基础知识进行一下梳理,以便进行归纳总结.适用于未使用过Oracle数据库的读者,或需要学习Oracle数据库方面的基础知识.如有不足之处,还请指正. 关于SQL介绍的 ...
- Python3.6 下 安装MySql
https://pypi.python.org/pypi/mysqlclient/1.3.10 该网页下下载 Python-3.5及上版本的扩展的mysql驱动. 下载的是一个.whl文件,下载目录为 ...