3181: [Coci2012]BROJ

Time Limit: 10 Sec   Memory Limit: 64 MB

Submit: 26  
Solved: 7

[
Submit][
Status]

Description

求最小质因子等于p的第n小的正整数(恰好有n-1个最小质因子等于p且比它
小的正整数)。p一定是质数。若答案超过10^9则输出0。

Input

 

Output

 

Sample Input

2 3

Sample Output

9

HINT

1 <= n, p <= 10^9

Source

 

[
Submit][
Status]

当n≥29时,枚举p的倍数,暴力可过。

当n<29时:暴力枚举不可过

开始找规律---发现循环节

设C为≤p的素数之积

经过cwj的证明:

若P<29,可以直接计算,设C为<=P的质数的积,由于P不大,C只是百万级的,硬统计C内有多少个符合要求,设符合要求的个数为c,则答案为((N-1)/c)*C+a[(N-1)%c+1],其中a[i]为第i个符合要求的数,现证明其正确性。

我们认为,若i合法,则C+i合法。

现反设C+i非法,则存在p<P满足p|C+i,因为C为<=P的质数的积,所以p|C,所以p|i,与假设矛盾,得证。


若i合法,则i%c必然合法。故i=a[k]+t*C (t>0)

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#include<cmath>
#include<cctype>
#include<cassert>
#include<climits>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define RepD(i,n) for(int i=n;i>=0;i--)
#define MEM(a) memset(a,0,sizeof(a))
#define MEMI(a) memset(a,127,sizeof(a))
#define MEMi(a) memset(a,128,sizeof(a))
#define INF (2139062143)
#define F (1000000009)
#define MAXN (1000000000)
#define MAXP (5000000)
typedef long long ll;
ll n,p;
int a[300]={0},size=0;
bool b[300]={0};
void make_prime(int n)
{
size=0;
b[1]=1;
Fork(i,2,n)
{
if (!b[i]) a[++size]=i;
For(j,size)
{
if (i*a[j]>n) break;
b[i*a[j]]=1;
if (i%a[j]==0) break;
}
}
}
int ans[10000000],tot=0;
int main()
{
// freopen("bzoj3181.in","r",stdin);
while (cin>>n>>p)
{
if (n==1) {cout<<p<<endl;continue;}
if (p>sqrt(MAXN)) {cout<<'0'<<endl;continue;}
if (p>=29)
{
int k=1;
for(int i=2*p;i<=MAXN;i+=p)
{
bool bo=0;
Fork(j,2,p-1)
if (i%j==0) {bo=1;break;}
if (!bo) k++;
if (k==n) {cout<<i<<endl;break;}
}
if (k<n) puts("0");
}
else
{
make_prime(p);
ll C=1;
For(i,size) C*=a[i];//,cout<<C<<endl;
tot=0;
for(ll i=p;i<=C&&i<=MAXN;i+=p)
{
bool bo=0;
For(j,size)
{
if (i%a[j]==0&&a[j]<p) {bo=1;break;}
}
if (!bo) ans[++tot]=i;
}
//if (n<=tot) cout<<ans[n]<<endl;
// if (tot==0) {puts("0");return 0;}
ll ans2=(ll)(n-1)/tot*C+ans[(n-1)%tot+1];
if (ans2>MAXN) puts("0");
else cout<<ans2<<endl;
}
// return 0; }
return 0;
}

BZOJ 3181([Coci2012]BROJ-最小质因子为p的第k小素数)的更多相关文章

  1. 【BZOJ】3196: Tyvj 1730 二逼平衡树(区间第k小+树套树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3196 Treap+树状数组 1WA1A,好伤心,本来是可以直接1A的,这次开始我并没有看题解,就写出 ...

  2. BZOJ.2588.Count on a tree(主席树 静态树上第k小)

    题目链接 /* 序列上的主席树 某点是利用前一个点的根建树 同理 树上的主席树 某个节点可以利用其父节点(is unique)的根建树 排名可以利用树上前缀和求得: 对于(u,v),w=LCA(u,v ...

  3. bzoj3181: [Coci2012]BROJ

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  4. Educational Codeforces Round 89 (Rated for Div. 2)D. Two Divisors 线性筛质因子

    题目链接:D:Two Divisors 题意: 给你n个数,对于每一个数vi,你需要找出来它的两个因子d1,d2.这两个因子要保证gcd(d1+d2,vi)==1.输出的时候输出两行,第一行输出每一个 ...

  5. Minimum Sum LCM UVA - 10791(分解质因子)

    对于一个数n 设它有两个不是互质的因子a和b   即lcm(a,b) = n 且gcd为a和b的最大公约数 则n = a/gcd * b: 因为a/gcd 与 b 的最大公约数也是n 且 a/gcd ...

  6. hdu 5428 质因子

    问题描述有一个数列,FancyCoder沉迷于研究这个数列的乘积相关问题,但是它们的乘积往往非常大.幸运的是,FancyCoder只需要找到这个巨大乘积的最小的满足如下规则的因子:这个因子包含大于两个 ...

  7. hdu6237 分解质因子

    题意:给一堆石子,每次移动一颗到另一堆,要求最小次数使得,所有石子数gcd>1 题解:枚举所有质因子,然后找次数最小的那一个,统计次数时,我们可以事先记录下每堆石子余质因子 的和,对所有石子取余 ...

  8. Openjudge 1.13-21:最大质因子序列(每日两水)

    总时间限制:  1000ms 内存限制:  65536kB 描述 任意输入两个正整数m, n (1 < m < n <= 5000),依次输出m到n之间每个数的最大质因子(包括m和n ...

  9. hdu5317 RGCDQ (质因子种数+预处理)

    RGCDQ 题意:F(x)表示x的质因子的种数.给区间[L,R],求max(GCD(F(i),F(j)) (L≤i<j≤R).(2<=L < R<=1000000) 题解:可以 ...

随机推荐

  1. html中隐藏域hidden的作用

    基本语法: <input type="hidden" name="field_name" value="value"> 作用: ...

  2. IOS Application生命周期

    第一阶段 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *) ...

  3. GCC、GDB、Makefile

    1.GCC程序编译 Linux系统下的gcc(GNUCCompiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一 ...

  4. 伪元素::selection(怎么修改网页中被选中文本的样式)

    当我们用鼠标选中一段文字的时候我们会发现文字的颜色和背景色都改变了, 有时候设计给这种选中状态设计了其他的样式,那么我们怎么来自定义选中的文本的样式呢? 用::selection <p>我 ...

  5. gauge.js的应用

    最近项目要做个手机端的仪表盘,但是画风太给力,echarts.highcharts.D3等等都不能满足业务的需求,你懂的!开找,找到个gauge.js 下面简单介绍下这个插件官网http://bern ...

  6. C#比较两个时间大小

    DateTime t1 = Convert.ToDateTime("2012-12-31 23:59:00");            DateTime t2 = Convert. ...

  7. js判断是否为ie的方法

    原文:http://blog.sina.com.cn/s/blog_7bbe4a850100v95z.html 下面第三种亲测可用 第一种: if(window.addEventListener){ ...

  8. jdbc select

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  9. C++_基础_C与C++的区别

    内容: (1)C++简介和编程的基本变化 (2)命名空间的概念和使用 (3)结构体.联合.枚举的不同 (4)布尔类型 以及 运算符别名 (5)函数的重载.缺省参数.哑元以 及内联 1.简介和编程的基本 ...

  10. Spring中注解的使用详解

    一:@Rsource注解的使用规则 1.1.案例演示 Spring的主配置文件:applicationContext.xml(因为我这里将会讲到很多模块,所以我用一个主配置文件去加载各个模块的配置文件 ...