poj 2773(容斥原理)
容斥原理入门题吧。
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 9798 | Accepted: 3341 |
Description
Now your job is easy: for the given integer m, find the K-th element which is relatively prime to m when these elements are sorted in ascending order.
Input
Output
Sample Input
2006 1
2006 2
2006 3
Sample Output
1
3
5
Source
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <string>
#include <queue>
#include <stdlib.h>
using namespace std; int m,k;
int mark[];
int save[];
int pcnt;
int g[];
long long int sum;
int cnt; void getprime()
{
//1不是素数
for(int i=;i<=;i++)
{
if(mark[i]==) continue;
save[pcnt++]=i;
for(int j=i;j<=;j+=i)
mark[j]=;
}
} void dfs(int n,long long num,int s,long long int key)
{
if(n==)
{
sum += key/num;
return ;
}
if(s>=cnt) return ; for(int i=s;i<cnt;i++)
{
if(num*g[i]>key) continue;
else dfs(n-,num*g[i],i+,key);
}
} long long int fuc(long long int x)
{
if(x==) return ; long long ans=; int sign=;
for(int i=;i<=cnt;i++)
{
sum=;
if(sign==)
{
dfs(i,,,x);
ans+=sum;
}
else
{
dfs(i,,,x);
ans-=sum;
}
sign=sign^;
} return x-ans;//这里面应该不会出现负数吧
} int main()
{
getprime();
while(scanf("%d%d",&m,&k)!=EOF)
{
//然后就是分解一个数了
cnt=;
for(int i=;i<=m;i++)
{
int flag=;
while(m%i==)
{
if(flag==)
{
g[cnt++]=i;
}
flag=;
m/=i;
}
}
if(m!=) g[cnt++]=m; //然后就是容斥原理 int b=,d=;
while(b<d)
{
int mid=(b+d)/;
int key=fuc(mid);
if(key>=k) d=mid;
else b=mid+;
}
printf("%d\n",b);
}
return ;
}
poj 2773(容斥原理)的更多相关文章
- Happy 2006 POJ - 2773 容斥原理+二分
题意: 找到第k个与m互质的数 题解: 容斥原理求区间(1到r)里面跟n互质的个数时间复杂度O(sqrt(n))- 二分复杂度也是O(log(n)) 容斥原理+二分这个r 代码: 1 #include ...
- POJ 2773 Happy 2006#素数筛选+容斥原理+二分
http://poj.org/problem?id=2773 说实话这道题..一点都不Happy好吗 似乎还可以用欧拉函数来解这道题,但正好刚学了容斥原理和二分,就用这个解法吧. 题解:要求输出[1, ...
- poj 2773 Happy 2006 - 二分答案 - 容斥原理
Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 11161 Accepted: 3893 Description Two ...
- [poj 2773] Happy 2006 解题报告 (二分答案+容斥原理)
题目链接:http://poj.org/problem?id=2773 题目大意: 给出两个数m,k,要求求出从1开始与m互质的第k个数 题解: #include<algorithm> # ...
- poj 2773 Happy 2006 容斥原理+二分
题目链接 容斥原理求第k个与n互质的数. #include <iostream> #include <vector> #include <cstdio> #incl ...
- POJ 2773 Happy 2006(容斥原理+二分)
Happy 2006 Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 10827 Accepted: 3764 Descr ...
- POJ 2773 Happy 2006 数学题
题目地址:http://poj.org/problem?id=2773 因为k可能大于m,利用gcd(m+k,m)=gcd(k,m)=gcd(m,k)的性质,最后可以转化为计算在[1,m]范围内的个数 ...
- poj 2773 Happy 2006
// 题意 :给你两个数 m(10^6),k(10^8) 求第k个和m互质的数是什么这题主要需要知道这样的结论gcd(x,n)=1 <==> gcd(x+n,n)=1证明 假设 gcd(x ...
- POJ 2773 Happy 2006(欧几里德算法)
题意:给出一个数m,让我们找到第k个与m互质的数. 方法:这题有两种方法,一种是欧拉函数+容斥原理,但代码量较大,另一种办法是欧几里德算法,比较容易理解,但是效率很低. 我这里使用欧几里德算法,欧几里 ...
随机推荐
- topcoder 642
A:直接拆开字符串写就好了. 今天的题目比较容易一些: B:题目大意: 求最少的翻转次数,每次翻转i是对应 y%i==0都会翻转. 球所有翻转为off状态的最小次数: 从最小idx开始,依次做就好了, ...
- ASP.NET为图片加上水印
为我们发布的图片加上一个水印,也是我们经常要做的事情,那怎么样来做呢,下面就一步步开始吧 首先是一个制作水印的类:ImageHandler,代码如下: using System; using Syst ...
- HDOJ 1085 Holding Bin-Laden Captive! (母函数)
Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- 在线运行HTML代码器
在线运行HTML代码器(二)和前面的(一)大同小异,关键部分为JS代码,这次是把运行器所有的JS功能集中放在一起.以下为HTML代码: <!DOCTYPE html PUBLIC "- ...
- sql注入分类
Sql注入根据数据提取通道的类型,从服务器接收到的响应等可以分为不同的类型. 基于从服务器接收到的响应 ▲基于错误的SQL注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL盲注 •基于布尔SQL盲注 •基 ...
- ACE 1.1.9 发布,开源云端代码编辑器
点这里 ACE 1.1.9 发布,开源云端代码编辑器 oschina 发布于: 2015年04月06日 (1评) 分享到: 收藏 +25 4月18日 武汉 源创会开始报名,送华为开发板 ACE ...
- Windows X64 Patch Guard
先简单介绍下PatchGuard ,摘自百度百科 PatchGuard就是Windows Vista的内核保护系统,防止任何非授权软件试图“修改”Windows内核,也就是说,Vista内核的新型金钟 ...
- SQL Server 2008管理工具出现 远程过程调用失败0x800706be解决方法
解决方法 出现此问题是因为在安装 Visual Studio 2012(VS2012) 时,会自动安装 "Microsoft SQL Server 2012 Express LocalDB& ...
- lintcode:最大间隔
题目 给定一个未经排序的数组,请找出其排序表中连续两个要素的最大间距. 如果数组中的要素少于 2 个,请返回 0. 注意事项 可以假定数组中的所有要素都是非负整数,且最大不超过 32 位整数. 样例 ...
- 客户端用httpurlconnection来进行http连接的
客户端用httpurlconnection来进行http连接的,并设置restful风格 请求响应流程 设置连接参数的方法 setAllowUserInteraction setDoInput set ...