bzoj:3085: 反质数加强版SAPGAP
Description
Input
Output
Sample Input
Sample Output


#include<cstdio>
#include<cstring>
#include<algorithm>
#include<ctime>
using namespace std; const int bi=1e4,MN=;
char c[];
int pr[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
struct big{
int a[MN];
inline big(){
memset(a,,sizeof(a));
a[]=;
}
inline void read(){
register int i,j;
scanf("%s",c);
a[]=(strlen(c)+)/;
for (i=;i<strlen(c);i++) j=(strlen(c)-i+)/,a[j]=a[j]*+c[i]-;
}
inline void pr(){
register int i;
printf("%d",a[a[]]);
for (i=a[]-;i;i--) printf("%04d",a[i]);
}
inline big operator =(int x){
if (x==){
memset(a,,sizeof(a));
a[]=;
}
a[]=;
while (x){
a[]++;
a[a[]]=x%bi;
x/=bi;
}
if (!a[]) a[]=;
}
inline big(int x){
*this=x;
}
inline void gl(){
while(!a[a[]]&&a[]>) a[]--;
}
inline big operator =(big x){
register int i;
a[]=x.a[];
for (i=;i<=a[];i++) a[i]=x.a[i];
}
inline bool operator >(big y){
if (a[]!=y.a[]) return a[]>y.a[];
for (register int i=a[];i;i--){
if (a[i]!=y.a[i]) return a[i]>y.a[i];
}
return ;
}
inline bool operator >=(const big y){
if (a[]!=y.a[]) return a[]>y.a[];
for (register int i=a[];i;i--){
if (a[i]!=y.a[i]) return a[i]>y.a[i];
}
return ;
}
inline bool operator <(big y){
if (a[]!=y.a[]) return a[]<y.a[];
for (register int i=a[];i;i--){
if (a[i]!=y.a[i]) return a[i]<y.a[i];
}
return ;
}
inline bool operator <=(big y){
if (a[]!=y.a[]) return a[]<y.a[];
for (register int i=a[];i;i--){
if (a[i]!=y.a[i]) return a[i]<y.a[i];
}
return ;
}
inline bool operator ==(big y){
if (a[]!=y.a[]) return ;
for (register int i=a[];i;i--){
if (a[i]!=y.a[i]) return ;
}
return ;
}
inline bool operator !=(big y){
return !(*this==y);
}
inline bool operator ==(int y){
big x=y;
return *this==x;
}
inline bool operator !=(int y){
return !(*this==y);
}
inline void swap(big &a,big &b){
big x=a;a=b;b=x;
}
inline big operator +(big x){
big r;
if (a[]<x.a[]) r.a[]=x.a[];else r.a[]=a[];
for (register int i=;i<=r.a[];i++) r.a[i]=a[i]+x.a[i];
for (register int i=;i<=r.a[];i++)
if (r.a[i]>=bi){
r.a[i]-=bi;r.a[i+]++;
if (i==r.a[]) r.a[]++;
}
return r;
}
inline big operator -(big x){
if (*this<x) swap(*this,x);
register int i;
big r;
if (a[]<x.a[]) r.a[]=x.a[];else r.a[]=a[];
for (i=;i<=r.a[];i++) r.a[i]=a[i]-x.a[i];
for (i=;i<=r.a[];i++)
if (r.a[i]<){
r.a[i+]--;r.a[i]+=bi;
}
r.gl();
return r;
}
inline big operator *(big y){
register int i,j;
big r;r.a[]=a[]+y.a[]-;
for (i=;i<=a[];i++)
for (j=;j<=y.a[];j++) r.a[i+j-]+=a[i]*y.a[j];
for (i=;i<=r.a[];i++)
if (r.a[i]>=bi){
r.a[i+]+=r.a[i]/bi;
r.a[i]%=bi;
if (i==r.a[]) r.a[]++;
}
return r;
}
inline big half(){
register int i,j;
for (i=a[];i>;i--) a[i-]+=(a[i]%)*bi,a[i]/=;
a[]/=;
gl();
return *this;
}
inline big operator /(big y){
register int i,j;
big r,l,mid,rq=*this;
r.a[]=rq.a[]+;r.a[r.a[]]=;
while(r>l){
mid=(l+r+big()).half();
if (mid*y<=rq) l=mid;else r=mid-big();
}
return l;
}
inline big operator %(big y){
register int i,j;
big rq=*this;
return rq-(rq/y*y);
}
}n,ans;
long long cu;
void dfs(int pos,int p,big sum,long long su){
if (pos==&&p>) p=;else
if (pos==&&p>) p=;else
if (pos==&&p>) p=;else
if (pos==&&p>) p=;else
if (pos==&&p>) p=;
if (pos>||sum>n) return;
if ((su>cu)||(sum<ans&&cu==su)) cu=su,ans=sum;
for (register int i=;i<=p;i++){
sum=sum*big(pr[pos]);
if (sum>n) return;
dfs(pos+,i,sum,su*(i+));
}
}
int main(){
n.read();
dfs(,,big(),);
ans.pr();
}
bzoj:3085: 反质数加强版SAPGAP的更多相关文章
- BZOJ 3085: 反质数加强版SAPGAP (反素数搜索)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3085 题意:求n(<=10^100)之内最大的反素数. 思路: 优化2: i ...
- 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 ...
- BZOJ 4857 反质数序列
题面 奇数+奇数一定不是质数(1+1除外),偶数+偶数一定不是质数,质数只可能出现在偶数+奇数中 把所有的点排成两列,权值为奇数的点在左边,权值为偶数的在右边 如果左边的点x+右边的点y是质数,我们就 ...
- [bzoj]1053反质数<暴搜>
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1053 感想:这道题拿到以后还是想去知道一个数的约数个数要怎么求,去网上搜了公式,但是还是没有思 ...
- CNUOJ 0486 800401反质数
难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1,g(4)=3, g ...
- 反质数问题,求不大于n的最大反质数
反质数:设f(n)表示n个约数的个数,如果对于任意x有0<x<n, f(x) < f(n),那么n就是一个反质数 我们都知道对于任意一个数n,都可以用质数乘积的形式表示出来:x = ...
- 反质数(Antiprimes)
转载http://www.cnblogs.com/tiankonguse/archive/2012/07/29/2613877.html 问题描述: 对于任何正整数x,起约数的个数记做g(x).例如g ...
- COJN 0486 800401反质数 呵呵呵呵呵
800401反质数 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1 ...
- HYSBZ 1053 反质数
input n 1<=n<=2000000000 output 不大于n的最大反质数 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g( ...
随机推荐
- C++11 新知识点
翻了下新版的C++ Primer,新的C++ 11真是变化很大,新增了很多语法特性.虽然已经很久没在写C++了,但一直对这门经典语言很感兴趣的,大致看了看前几章基础部分,总结下新特性备个忘吧.估计也很 ...
- iOS MJRefresh上拉加载更多
1.导入MJRefresh包 2.在类中引入:#import "MJRefresh.h" 3.添加footerView 添加加载更多的UI样式: MJRefreshAutoNorm ...
- akka-stream与actor系统集成以及如何处理随之而来的背压问题
这几天上海快下了五天的雨☔️☔️☔️☔️,淅淅沥沥,郁郁沉沉. 一共存在四个api: Source.actorRef,返回actorRef,该actorRef接收到的消息,将被下游消费者所消费 ...
- bzoj 5016: [Snoi2017]一个简单的询问
Description 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. Input 第 ...
- 关于sleep函数的一些问题和资料
//================================================================================================ 2 ...
- ogg12-ERROR OGG-01031 file D:\OGG\dirdat\ed000000 is not in any allowed output directories
配置ogg时出现这个错误: 2018-01-04 14:22:58 ERROR OGG-01031 Oracle GoldenGate Capture for Oracle, P147148.prm: ...
- 在IIS使用localDB
项目使用localdb来作为本机测试数据库,发布到本机IIS后项目却链接不到数据库,查看windows日志为如下错误 "无法获取本地应用程序数据路径.很可能是因为未加载用户配置文件.如果在 ...
- Java中使用LocalDate根据日期来计算年龄
Java中和日期直接相关的类有很多,平时最常用到的就是java.util package下面的Date和Calendar,需要用到格式的时候还会用到java.text.SimpleDateFormat ...
- 12.python进程\协程\异步IO
进程 创建进程 from multiprocessing import Process import time def func(name): time.sleep(2) print('hello', ...
- git for windows上传项目到github
软件:git for windows 账户:github账户 1.第一步创建自己的github账号,并创建自己的project,创建完毕之后url如下 https://github.com/ft110 ...