这道题是典型的数搜索,讲究把数一层一层化小,而且还有最重要的大质数剪枝。

#include <cstdio>
#include <cmath>
typedef long long LL;
int n;
const int N=;
const LL Inf=0x7fffffff;
LL ans;
int len,prime[N];
bool isnot[N];
inline void getprime(){
int lim=;
for(int i=;i<=lim;i++){
if(!isnot[i])prime[++len]=i;
for(int j=;prime[j]*i<=lim;j++){
isnot[prime[j]*i]=;
if(i%prime[j]==)break;
}
}
}
inline bool isprime(int x){
if(x==)return ;
int lim=(int)sqrt(x+0.5);
for(int i=;prime[i]<=lim;i++)
if(x%prime[i]==)
return ;
return ;
}
inline LL Min(LL x,LL y){
return x<y?x:y;
}
void dfs(int pos,LL now,int rest){
if(pos>=len)return;
if(now>=ans)return;
if(rest==){ans=now;return;}
if(isprime(rest+)){ans=Min(ans,now*(rest+));return;}
LL have=prime[pos]-,j=prime[pos];
if(pos==)have<<=,j<<=;
while(rest%have==)
dfs(pos+,now*j,rest/have),have*=prime[pos],j*=prime[pos];
dfs(pos+,now,rest);
}
int main(){
getprime(),scanf("%d",&n),ans=Inf+;
if(n<=){printf("-1");return ;}
if(n==){printf("");return ;}
dfs(,,n);
printf("%lld",ans==Inf+?-:ans);
}

最新文章

  1. 烂泥:学习mysql数据库主从同步复制原理
  2. 资源监控工具Spotlight-使用说明
  3. 字符串与json之间的相互转化
  4. laravel paginate动态分页
  5. math对象和date对象
  6. CF 253B Two Heaps
  7. JavaScript获取两个时间的时间差
  8. A const field of a reference type other than string can only be initialized with null Error [duplicate]
  9. C语言中的宏总结
  10. &lt;input&gt; 标签
  11. Session中超时时长设置
  12. 【转】关于“ORA-01653: 表 SYS.AUD$ 无法通过 128 (在表空间 SYSTEM 中) 扩展”的错误
  13. Android中使用findViewByMe提升组件查找效率
  14. Canvas 实现灵动的红鲤鱼动画(上)
  15. React和Vue的组件更新比较
  16. python的小基础
  17. UINavigationController 返回手势与 leftBarButtonItem
  18. 【BZOJ3140】消毒(二分图匹配)
  19. 【转载】Jenkins安装以及邮件配置
  20. java的几个奇怪语法

热门文章

  1. 我是一个MySQL小白
  2. Django自带后台使用配置
  3. python数据类型及其特有方法
  4. linux中常用命令总结
  5. Spyder在windows下常用快捷键
  6. 10+ Best Responsive HTML5 AngularJS Templates
  7. FTP 主动模式与被动模式
  8. gp更新来的太快
  9. Linux安装mysql以及安装时踩下的坑
  10. 关于ArrayList add()方法 中的引用问题