Description

先解释一下SAPGAP=Super AntiPrime, Greatest AntiPrime(真不是网络流),于是你就应该知道本题是一个关于反质数(Antiprime)的问题。下面给出反质数的定义:
将一个正整数i的约数个数记为g(i),如g(1)=1,g(2)=2,g(6)=4。
如果对于一个正整数k,对于任意正整数i<k,均有g(k)>g(i),则k被称为反质数。
比如说1,2,4,6,12就是前5个反质数。
现在给定一个N,求N以内最大的反质数。
你一定会认为这道题很简单,你曾经做过好多遍(它就是许许多多竞赛的原题呀),但是这次真的不一样。
 

Input

一个正整数N(1≤N≤10100)。
 

Output

一个正整数,表示不超过N的最大的反质数。
 

Sample Input

1000

Sample Output

840
 
 
套个高精度模板,然后搜个索,剪个枝就好了……
 
壮哉我大云神……
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<ctime>
  5. using namespace std;
  6.  
  7. const int bi=1e4,MN=;
  8. char c[];
  9. int pr[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
  10. struct big{
  11. int a[MN];
  12. inline big(){
  13. memset(a,,sizeof(a));
  14. a[]=;
  15. }
  16. inline void read(){
  17. register int i,j;
  18. scanf("%s",c);
  19. a[]=(strlen(c)+)/;
  20. for (i=;i<strlen(c);i++) j=(strlen(c)-i+)/,a[j]=a[j]*+c[i]-;
  21. }
  22. inline void pr(){
  23. register int i;
  24. printf("%d",a[a[]]);
  25. for (i=a[]-;i;i--) printf("%04d",a[i]);
  26. }
  27. inline big operator =(int x){
  28. if (x==){
  29. memset(a,,sizeof(a));
  30. a[]=;
  31. }
  32. a[]=;
  33. while (x){
  34. a[]++;
  35. a[a[]]=x%bi;
  36. x/=bi;
  37. }
  38. if (!a[]) a[]=;
  39. }
  40. inline big(int x){
  41. *this=x;
  42. }
  43. inline void gl(){
  44. while(!a[a[]]&&a[]>) a[]--;
  45. }
  46. inline big operator =(big x){
  47. register int i;
  48. a[]=x.a[];
  49. for (i=;i<=a[];i++) a[i]=x.a[i];
  50. }
  51. inline bool operator >(big y){
  52. if (a[]!=y.a[]) return a[]>y.a[];
  53. for (register int i=a[];i;i--){
  54. if (a[i]!=y.a[i]) return a[i]>y.a[i];
  55. }
  56. return ;
  57. }
  58. inline bool operator >=(const big y){
  59. if (a[]!=y.a[]) return a[]>y.a[];
  60. for (register int i=a[];i;i--){
  61. if (a[i]!=y.a[i]) return a[i]>y.a[i];
  62. }
  63. return ;
  64. }
  65. inline bool operator <(big y){
  66. if (a[]!=y.a[]) return a[]<y.a[];
  67. for (register int i=a[];i;i--){
  68. if (a[i]!=y.a[i]) return a[i]<y.a[i];
  69. }
  70. return ;
  71. }
  72. inline bool operator <=(big y){
  73. if (a[]!=y.a[]) return a[]<y.a[];
  74. for (register int i=a[];i;i--){
  75. if (a[i]!=y.a[i]) return a[i]<y.a[i];
  76. }
  77. return ;
  78. }
  79. inline bool operator ==(big y){
  80. if (a[]!=y.a[]) return ;
  81. for (register int i=a[];i;i--){
  82. if (a[i]!=y.a[i]) return ;
  83. }
  84. return ;
  85. }
  86. inline bool operator !=(big y){
  87. return !(*this==y);
  88. }
  89. inline bool operator ==(int y){
  90. big x=y;
  91. return *this==x;
  92. }
  93. inline bool operator !=(int y){
  94. return !(*this==y);
  95. }
  96. inline void swap(big &a,big &b){
  97. big x=a;a=b;b=x;
  98. }
  99. inline big operator +(big x){
  100. big r;
  101. if (a[]<x.a[]) r.a[]=x.a[];else r.a[]=a[];
  102. for (register int i=;i<=r.a[];i++) r.a[i]=a[i]+x.a[i];
  103. for (register int i=;i<=r.a[];i++)
  104. if (r.a[i]>=bi){
  105. r.a[i]-=bi;r.a[i+]++;
  106. if (i==r.a[]) r.a[]++;
  107. }
  108. return r;
  109. }
  110. inline big operator -(big x){
  111. if (*this<x) swap(*this,x);
  112. register int i;
  113. big r;
  114. if (a[]<x.a[]) r.a[]=x.a[];else r.a[]=a[];
  115. for (i=;i<=r.a[];i++) r.a[i]=a[i]-x.a[i];
  116. for (i=;i<=r.a[];i++)
  117. if (r.a[i]<){
  118. r.a[i+]--;r.a[i]+=bi;
  119. }
  120. r.gl();
  121. return r;
  122. }
  123. inline big operator *(big y){
  124. register int i,j;
  125. big r;r.a[]=a[]+y.a[]-;
  126. for (i=;i<=a[];i++)
  127. for (j=;j<=y.a[];j++) r.a[i+j-]+=a[i]*y.a[j];
  128. for (i=;i<=r.a[];i++)
  129. if (r.a[i]>=bi){
  130. r.a[i+]+=r.a[i]/bi;
  131. r.a[i]%=bi;
  132. if (i==r.a[]) r.a[]++;
  133. }
  134. return r;
  135. }
  136. inline big half(){
  137. register int i,j;
  138. for (i=a[];i>;i--) a[i-]+=(a[i]%)*bi,a[i]/=;
  139. a[]/=;
  140. gl();
  141. return *this;
  142. }
  143. inline big operator /(big y){
  144. register int i,j;
  145. big r,l,mid,rq=*this;
  146. r.a[]=rq.a[]+;r.a[r.a[]]=;
  147. while(r>l){
  148. mid=(l+r+big()).half();
  149. if (mid*y<=rq) l=mid;else r=mid-big();
  150. }
  151. return l;
  152. }
  153. inline big operator %(big y){
  154. register int i,j;
  155. big rq=*this;
  156. return rq-(rq/y*y);
  157. }
  158. }n,ans;
  159. long long cu;
  160. void dfs(int pos,int p,big sum,long long su){
  161. if (pos==&&p>) p=;else
  162. if (pos==&&p>) p=;else
  163. if (pos==&&p>) p=;else
  164. if (pos==&&p>) p=;else
  165. if (pos==&&p>) p=;
  166. if (pos>||sum>n) return;
  167. if ((su>cu)||(sum<ans&&cu==su)) cu=su,ans=sum;
  168. for (register int i=;i<=p;i++){
  169. sum=sum*big(pr[pos]);
  170. if (sum>n) return;
  171. dfs(pos+,i,sum,su*(i+));
  172. }
  173. }
  174. int main(){
  175. n.read();
  176. dfs(,,big(),);
  177. ans.pr();
  178. }

bzoj:3085: 反质数加强版SAPGAP的更多相关文章

  1. BZOJ 3085: 反质数加强版SAPGAP (反素数搜索)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3085 题意:求n(<=10^100)之内最大的反素数. 思路: 优化2: i ...

  2. 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 ...

  3. BZOJ 4857 反质数序列

    题面 奇数+奇数一定不是质数(1+1除外),偶数+偶数一定不是质数,质数只可能出现在偶数+奇数中 把所有的点排成两列,权值为奇数的点在左边,权值为偶数的在右边 如果左边的点x+右边的点y是质数,我们就 ...

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

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

  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. HYSBZ 1053 反质数

    input n 1<=n<=2000000000 output 不大于n的最大反质数 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g( ...

随机推荐

  1. Python网络爬虫与信息提取(二)—— BeautifulSoup

    BeautifulSoup官方介绍: Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. 官方 ...

  2. gitlab 升级

    =============================================== 2017/10/21_第1次修改                       ccb_warlock = ...

  3. 在QComboBox的基础上实现复选功能

    这个是最近的一个项目上需要实现的功能.要求如下: 下拉列表的项目可以多选 显示框不能编辑 所选中的项目在显示框中出现 下面根据网上的提示代码(参照博客 一去二三里),主要实现如下代码(与参照略有不同) ...

  4. 鸟哥的linux私房菜学习-(一)优缺点分析以及主机规划与磁盘分区

    一.linux的优缺点 那干嘛要使用Linux做为我们的主机系统呢?这是因为Linux有底下这些优点: 稳定的系统:Linux本来就是基于Unix概念而发展出来的操作系统,因此,Linux具有与Uni ...

  5. thinkinginjava学习笔记10_容器

    Java中并没有像Perl.Python.Ruby那样对容器有直接的支持,但是可以依靠容器类来完成相同的工作: 泛型 使用一个ArrayList对象可以保存一系列的对象,如: ArrayList ap ...

  6. Fiddler中使用AutoResponder创建规则替换线上文件

    Fiddler 的AutoResponder tab允许你从本地返回文件,而不用将http request 发送到服务器上. 1.AutoResponder规则实例 (1) 打开博客园首页,把博客园的 ...

  7. Python 词云分析周杰伦《晴天》

    一.前言满天星辰的夜晚,他们相遇了...夏天的时候,她慢慢的接近他,关心他,为他付出一切:秋天的时候,两个人终於如愿的在一起,分享一切快乐的时光但终究是快乐时光短暂,因为杰伦必须出国深造,两人面临了要 ...

  8. value toDF is not a member of org.apache.spark.rdd.RDD

    idea显示toDF() 没有这个函数,显示错误: Error:(82, 8) value toDF is not a member of org.apache.spark.rdd.RDD[com.d ...

  9. JS随机显示一张图片

    var images=['p1.jpg','p2.jpg','p3.jpg']; var url=images[Math.floor(Math.random()*images.length)]; co ...

  10. MicroPython之TPYBoard v102开发板控制OLED显示中文

    转载请以链接形式注明文章来源,公众号:MicroPython玩家汇 0x00前言 之前看到一篇文章是关于TPYBoardv102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近 ...