HDU4542 小明系列故事—未知剩余系
2015-09-29 16:24
447 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542
分析:详见上上上篇博文
代码:
分析:详见上上上篇博文
代码:
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int Tmax=500005,pri[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53}; const unsigned long long int inf=4611686018427387904; int n,ORZ[Tmax]; unsigned long long int ans; void init() { int i,j; for(i=1;i<=Tmax-1;i++) ORZ[i]=i-1; for(i=2;i<=Tmax-1;i++) { for(j=i;j<=Tmax-1;j+=i) ORZ[j]--; if(ORZ[ORZ[i]]==0) ORZ[ORZ[i]]=i; ORZ[i]=0; } return; } void dfs(int p,unsigned long long int sum,int num,int limit) { if(num>n) return ; if(num==n) { ans=min(ans,sum); return; } int i; for(i=1;i<=limit;i++) { if(ans/pri[p]<sum||num*(i+1)>n) break; sum*=pri[p]; if(n%(num*(i+1))==0) dfs(p+1,sum,num*(i+1),i); } return; } int main() { int T,kase=0,type; init(); scanf("%d",&T); while(T--) { ans=inf; scanf("%d%d",&type,&n); if(type==1) ans=ORZ ; else dfs(1,1,1,63); printf("Case %d: ",++kase); if(ans>=inf) printf("INF\n"); else if(ans==0) printf("Illegal\n"); else printf("%llu\n",ans); } return 0; }
相关文章推荐
- matlab窗口学习
- c++ set 交集 并集 差集
- 我们组做的便签项目删除部分
- [LeetCode]Rectangle Area
- Period II---fzu1901(Next数组)
- oracle中sql执行性能关注点
- LIS(变形) HDOJ 5489 Removed Interval
- 各种网页错误代码解释(400.404.504等)
- Oracle的基本查询
- CentOS下安装JDK1.7
- MyEclipse 8.5 注释模板设置
- js下载图片到本地
- Longest Substring Without Repeating Characters
- C#编程规范
- Spark的Shuffle机制
- js获取客户端MAC地址
- 使用node.js进行API自动化回归测试
- 日志采集之log4j2.x的使用
- UDP Sockets in C#
- VB 获取文件版本