input

n 1<=n<=2000000000

output

不大于n的最大反质数

对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。
如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。

做法:直接打表查找

 #include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
#define MAX 100000
#define INF 2000000000
#define LL long long
int cas=,T,n,a[MAX],an,p[]={,,,,,,,,,};
struct node
{
int b[],n,v,g; //b数组是质数对应的次方,v是值,g是约数个数,n是质因子个数
bool operator<(node a)const { return v>a.v; }
};
void init()
{
std::priority_queue<node>q;
a[]=;an=;
int ming=;//当前最大的约数个数
node u;
u.v=;u.n=;u.b[]=;u.g=;
q.push(u);
while(!q.empty())
{
u=q.top();q.pop();
// printf("%d %d %d\n",u.v,u.g,u.n);
if(u.g>ming) { ming=u.g;a[an++]=u.v; }//比当前最大约数个数大的统计
else continue;
for(int i=;i<=u.n;i++)//出队后将每个质数对应的次方加一放进队列里
{
node v;
memcpy(&v,&u,sizeof(node));
LL tmp=(LL)v.v*p[i];
v.b[i]++;
v.g=v.g/v.b[i]*(v.b[i]+);
if(tmp<=INF) v.v=tmp;
if(tmp<=INF&&v.g>ming) q.push(v);
// printf("aaa:%d %d %d\n",v.v,v.g,v.n);
}
if(u.n+<)//增加一个质因子
{
node v;
memcpy(&v,&u,sizeof(node));
v.n++;v.b[v.n]=;v.g*=;
LL tmp=(LL)v.v*p[v.n];
if(tmp<=INF) v.v=tmp;
if(tmp<=INF&&v.g>ming) q.push(v);
}
}
a[an++]=INF+;
printf("%d\n",an);
for(int i=;i<an;i++) printf("%d,",a[i]);
}
int main()
{
//freopen("in","r",stdin);
//scanf("%d",&T);
init();
while(scanf("%d",&n)==) printf("%d\n",*(std::upper_bound(a,a+an,n)-));
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return ;
}

HYSBZ 1053 反质数的更多相关文章

  1. [bzoj]1053反质数<暴搜>

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1053 感想:这道题拿到以后还是想去知道一个数的约数个数要怎么求,去网上搜了公式,但是还是没有思 ...

  2. 反素数ant HYSBZ - 1053(数学+dfs)

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

  3. BZOJ 1053 - 反素数ant - [数论+DFS][HAOI2007]

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1053 题解: 可以证明,$1 \sim N$ 中最大的反质数,就是 $1 \sim N$ ...

  4. BZOJ1053 [HAOI2007]反素数 & BZOJ3085 反质数加强版SAPGAP

    BZOJ 1053 Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x ,则称x ...

  5. CNUOJ 0486 800401反质数

    难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1,g(4)=3, g ...

  6. 反质数问题,求不大于n的最大反质数

    反质数:设f(n)表示n个约数的个数,如果对于任意x有0<x<n, f(x) < f(n),那么n就是一个反质数 我们都知道对于任意一个数n,都可以用质数乘积的形式表示出来:x = ...

  7. 反质数(Antiprimes)

    转载http://www.cnblogs.com/tiankonguse/archive/2012/07/29/2613877.html 问题描述: 对于任何正整数x,起约数的个数记做g(x).例如g ...

  8. COJN 0486 800401反质数 呵呵呵呵呵

    800401反质数 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1 ...

  9. bzoj:3085: 反质数加强版SAPGAP

    Description 先解释一下SAPGAP=Super AntiPrime, Greatest AntiPrime(真不是网络流),于是你就应该知道本题是一个关于反质数(Antiprime)的问题 ...

随机推荐

  1. easyui datagrid分页

    datagrid分页设置 pagination="true" 貌似是不行的!  只是显示分页工具栏 没有达到分页效果 前端 $(function (){ var p = $('#d ...

  2. 微信小程序 textarea 简易解决方案

    微信小程序中textarea没有bindchange事件,所以无法在输入时给变量赋值. 虽然可以使用bindblur事件,但是绑定bindblur事件,如果再点击按钮,则先执行完按钮事件后,再去执行b ...

  3. 一种基于FSIM对视频编码图像质量客观评价的方法

    一 为什么对视频编码图像质量客观评价     视频图像质量主观评价一般采用连续双激励质量度量法对任一观测者连续给出原始视频图像和处理过的失真图像,由观测者根据主观感知给出分值,其需针对多个视频对象进行 ...

  4. wefwewewe

    <a hred="https://www.baidu.com">dssf</a>

  5. Mac下MySQL的安装与配置

    之前一直用的是阿里云的服务器,在服务器上装了一个MySQL,但是今天发现到期了,而且续费时发现之前的大学生优惠不能用了,可是明明到6月份,大学生才毕业啊,shit!!!所以没办法只能在自己电脑上装一个 ...

  6. Mysql存储过程和函数

    Mysql存储过程和函数 基本概念: 创建存储过程和函数是指将经常使用的一组SQL语句的组合在一起,并将这些SQL语句当作一个整体存储在MySQL服务器中.例如,银行经常需要计算用户的利息.不同类别的 ...

  7. C++笔记(to be cont'd)

    最近在看这个:LearnCpp 主要是一些我自己容易忽视的地方 记一些笔记在下面,还有错漏地方请不吝赐教 CH1.10 Preprocessing The preprocessor copies th ...

  8. Managed Switch: Confs

    shortcuts: c-w: delete word before c-a: move to first char c-y: delete everything after cursor c-z: ...

  9. 解决“在UBUNTU下打开windows中创建的文本文件,中文显示乱码”的问题 。

    在UBUNTU下打开windows中用notepad等工具创建的txt或程序源码等文本文件,中文显示乱码,原因是windows中的txt文件编码方式为GBK,UBUNTU中为utf-8. 解决办法:在 ...

  10. linux开发

    linux开发资料 01 02 03 04 05 06 07 08 09 10 11 1 2 3 4 5 21 22 23 24 25