hdu 4542 打表+含k个约数最小数
http://acm.hdu.edu.cn/showproblem.php?pid=4542
给出一个数K和两个操作
如果操作是0,就求出一个最小的正整数X,满足X的约数个数为K。
如果操作是1,就求出一个最小的X,满足X的约数个数为X-K。
对于操作0,分析见这里,搜索需要有力剪枝。对于操作1,代表1至X中不是X的约数个数为K,看似还是搜索,但是由于时限卡的丧心病狂...所以用打表完成
d[i]先用来表示i的约数个数,然后可以模仿素数打表,对于每个数的每个倍数,其d值都自减1,这样就求出每个i对应的d[i](非约数个数)
又由于然后对于i来讲,一定有d[i]<i,那么我们只需在求d[i]的过程中将其映射关系调换为指定非约数个数的最小的数,方法就是
if(!d[d[i]]) d[d[i]] = i;
d[i] = 0;
仔细想想这两句话的意思!
#pragma comment(linker, "/STACK:36777216")
#pragma GCC optimize ("O2")
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <map>
#include <iostream>
#include <algorithm>
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define clr0(x) memset(x,0,sizeof(x))
#define eps 1e-9
const double pi = acos(-1.0);
typedef long long LL;
typedef unsigned long long ULL;
const int modo = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int maxn = 1005,N = 50000;
int n,pr[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
LL ans;
int d[N]; void Init()
{
for(int i = 1;i < N;i++) d[i] = i;
for(int i = 1;i < N;i++)
{
for(int j = i;j < N;j += i) d[j]--;
if(!d[d[i]]) d[d[i]] = i;
d[i] = 0;
}
// for(int i = 1;i < 100;++i){
// cout<<i<<':'<<d[i]<<endl;
// }
}
void dfs(int dep,int cnt,LL res)
{
if(cnt > n)
return;
if(cnt == n){
ans = min(ans,res);
return ;
}
for(int i = 1;i <= 62;++i){
if(res > ans/pr[dep] || cnt*(i+1) > n)
break;
res *= pr[dep];
if(n % (cnt*(i+1)) == 0)
dfs(dep+1,cnt*(i+1),res);
}
}
int main(){
Init();
int _,cas = 1;RD(_);
while(_--){
int type;
RD2(type,n);
if(type)
ans = d[n];
else{
ans = 1LL<<62;
dfs(0,1,1);
}
printf("Case %d: ",cas++);
if(ans == 0) puts("Illegal");
else if(ans >= 1LL<<62) puts("INF");
else printf("%I64d\n",ans);
}
return 0;
}
hdu 4542 打表+含k个约数最小数的更多相关文章
- Codeforces Beta Round #27 E. Number With The Given Amount Of Divisors 含n个约数最小数
http://codeforces.com/problemset/problem/27/E RT,求含n个约数的最小的数 我们设答案p = 2^t1 * 3^t2 * -- * p^tk(其中p是第k ...
- POJ C程序设计进阶 编程题#1:含k个3的数
编程题#1:含k个3的数 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 输 ...
- hdu 5008 查找字典序第k小的子串
Boring String Problem Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- HDU 5726 GCD 区间GCD=k的个数
GCD Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others) ...
- hdu 4542 小明系列故事——未知剩余系 反素数 + 打表
小明系列故事——未知剩余系 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Prob ...
- hdu 5019(第K大公约数)
Revenge of GCD Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 1223 打表 + 大数
http://acm.hdu.edu.cn/showproblem.php?pid=1223 一般遇到这些题,我都是暴力输出前几项,找规律.未果. 然后输出n = 1时候,以A开始,有多少个答案, n ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
随机推荐
- centos7.2下nginx安装教程
1.准备工作 1)关闭iptables 关闭操作 iptables -t nat -F 查看操作 iptables -t nat -L 2)关闭selinux 查看操作 setenforce 关闭操作 ...
- java1.8 版本改成 java1.7版本
以前先安装的java1.7 大部分程序应该都是只支持1.7 不支持1.8 但是因为要跑一个别人的项目 要求是java1.8 所以想在电脑上同时装1.7和1.8 到官网上下载1.8 安装 安装完成后 并 ...
- 2019年Java未来的发展方向
2018即将结束,迎来2019年,Java作为世界上 最流行的计算机编程语言,在当今信息时代中发挥了重要的作用.Java语言本身具有着自己独特的优势:面向对象.分布式应用并且安全.多线程.跨平台等.这 ...
- vs2015 npm list 更新问题
在更新npm list时候,经常会非常的慢,今天试了一个诡异的方法,就是在文件夹下面直接把所有缓存全部删除,全部重新下,结果感觉反而速度快很多. 原来的更新包80M竟然1个小时没有下载完. C:\Us ...
- POJ 3621Sightseeing Cows 0/1 分数规划
Description 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地 讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的 ...
- merge_关系
create(olive:Person{chau:"Bill White",name:"Olive Stone",bornin:"New York&q ...
- PHP网站记录
手把手教您搭建Apache下的PHP环境 http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%8E%A8%E8%8D%90/37371.sh ...
- oracle 62进制序列号
create or replace function GetSerial62(v_lpad number default 0) return varchar2 IS v_tmp number(38,0 ...
- tomcat运行监控脚本,自动启动
参见:http://www.cnblogs.com/coffee_cn/p/8279165.html monitor.sh #!/bin/sh monitorlog=/usr/local/tomcat ...
- Git使用基础篇(zz)
Git使用基础篇 您的评价: 收藏该经验 Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体 ...