题目:洛谷P1463、BZOJ1053、Vijos P1172、codevs2912。

题目大意:对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。

如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。

现在给定一个数N(≤2,000,000,000),求出不超过N的最大的反质数。

解题思路:N那么大,第一反应是找规律。

首先得打出一个范围较小的表(三秒内能打完的),发现:范围大,但反素数很少。

于是果断选择了打表大法!

不过打表也得讲究技巧。首先发现所有反素数(除1以外)都是偶数,那么在循环判断时只需循环偶数即可。

其次发现从60开始,每个反素数都是20的倍数,那么此时每次加20即可。

但二十亿个数,还是很多。怎么办?我们发现,两个反素数直接总是相差很多,那我们每求出一个反素数,就跳过一部分,使得减少循环次数。

最终,成功打出表,见代码(最后那个$2^{32}-1$是占位用的)。

C++ Code:

#include<cstdio>
const int a[]={1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260,1680,2520,
5040,7560,10080,15120,20160,25200,27720,45360,50400,55440,83160,110880,166320,
221760,277200,332640,498960,554400,665280,720720,1081080,1441440,2162160,2882880,
3603600,4324320,6486480,7207200,8648640,10810800,14414400,18378360,21621600,32432400,
36756720,43243200,61261200,73513440,110270160,122522400,147026880,183783600,245044800,
328648320,410810400,551350800,698377680,735134400,1102701600,1396755360,2147483647};
int main(){
int n;
scanf("%d",&n);
for(int i=0;;++i)
if(a[i]>n){
printf("%d\n",a[i-1]);
return 0;
}
}

下附打表代码,在我家里的渣机上跑了33分02秒279(O2优化下),不过总归是能打完的。

#include<cstdio>
#define reg register
#define ull unsigned long long
int main(){
freopen("output.txt","w",stdout);
printf("1,");
reg int t=2;
reg ull max=1;
for(reg ull i=2;i<=2000000200;i+=t){
if(i==60)t=20;
reg ull p=1,k=i;
for(reg int j=2;j*j<=k;++j)
if(k%j==0){
reg ull f=1;
for(;k%j==0;k/=j,++f);
p*=f;
}
if(k>1)p<<=1;
if(p>max){
max=p;
printf("%llu,",i);
if(i>=800000000)i+=100000000;else
if(i>=410810400)i+=30000000;else
if(i==328648320)i=410810380;else
if(i>=200000000)i+=50000000;else
if(i==147026880)i+=35000000;else
if(i>=122522400)i+=20000000;else
if(i>=43243200)i+=10000000;else
if(i>=21621600)i+=4000000;else
if(i>=10000000)i+=3000000;else
if(i>=1400000)i+=600000;else
if(i>=1000000)i+=300000;else
if(i>=100000)i+=50000;
}
}
return 0;
}

  

[HAOI2007][SDOI2005]反素数的更多相关文章

  1. 洛谷 P1463 [SDOI2005]反素数ant

    P1463 [SDOI2005]反素数ant 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i< ...

  2. [luogu]P1463 [SDOI2005]反素数ant[dfs][数学][数论]

    [luogu]P1463 [SDOI2005]反素数ant ——!x^n+y^n=z^n 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足: ...

  3. 【BZOJ】【1053】【HAOI2007】反素数ant

    搜索 经典搜索题目(其实是蒟蒻只会搜……vfleaking好像有更优秀的做法?) 枚举质数的幂,其实深度没多大……因为$2^32$就超过N了……而且质数不能取的太大,所以不会爆…… /******** ...

  4. [BZOJ1053][SDOI2005]反素数ant 数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1053 假设这个最大的反素数为$x$,那么$1<p<x$中数的因子数都没有$x$ ...

  5. [SDOI2005]反素数

    题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...

  6. P1463 [SDOI2005]反素数ant

    题意: 题解: 思维难度不高,考虑到n较大,而反质数个数较少 所以只要算出每个反质数即可 考虑如何计算,可以发现,我们只需枚举计算出约数有x个的最小数,再做一下判断即可 另外约数的个数=(a1+1)( ...

  7. [SDOI2005]反素数ant

    题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...

  8. 洛谷 P1463 [SDOI2005]反素数ant && codevs2912反素数

    题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...

  9. 【HAOI2007】反素数

    [题目链接] 点击打开链接 [算法] 稍加分析可知,问题等价于“求1到n中,因子个数最多的数,若有多个,求最小的” 那么我们该怎么求这个数呢? 约数个数定理 : x = p1^a1p2^a2p3^a3 ...

随机推荐

  1. Caffe学习--Net分析

    Caffe_Net 1.基本数据 vector<shared_ptr<Layer<Dtype> > > layers_; // 记录每一层的layer参数 vect ...

  2. C++12.1.4 类的前向声明、不完全类型类

    只声明却没有定义的类称为—————–不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明(不是定义)使用该类型作为形参类型或返回类型的函数. 在创建类的对象之前 ...

  3. 线程状态与tcb、线程的生命周期

    struct tcb { u32_t status; struct reg_context thread_context; void *stack; struct thread_info thread ...

  4. Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现

    前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...

  5. pycharm日常填坑

    pycharm坑很多,今天又遇见了,好吧 ,填坑 场景:从别的地方拷贝过来的项目,导入本地的pycharm 然后选择 然后 还会报错....心累 报错内容: django commands canno ...

  6. luogu P1592 互质(欧拉函数)

    题意 (n<=106,k<=108) 题解 一开始以为是搜索. 但想想不对,翻了一眼题解发现是欧拉函数. 因为 gcd(a,b)=gcd(a,a+b) 所以和n互质的数应该是类似a1,a2 ...

  7. 比较排序算法(PHP)

    冒泡排序 两两比较相邻记录的关键字,如果反序则交换,大的数字往下沉,一直到最大的出现在数组最后 function swap(&$x, &$y) { $temp = $x; $x = $ ...

  8. Lorenzini:Laplacian与图上的黎曼-罗赫定理

    前两天去听了一下搞代数几何的Dino Lorenzini在交大的两场讲座(“On Laplacian Of Graphs and Generalization”,“Riemann-Roch Theor ...

  9. Android APP弱网测试问题和解决分析

    最近做了一次移动APP的弱网和中断测试,接下来分享一下遇到的一些问题: 1.现象:用户登录应用时下载初始化数据,下载过程中因网速太慢点击取消并重新登录,数据初始化完成后出现重复,造成数据不一致. 原因 ...

  10. Inter-partition communication in multi-core processor

    A multi-core processor includes logical partitions that have respective processor cores, memory area ...