hdu4542 小明系列故事——未知剩余系(反素数打表待改!!不会!!)
来源:互联网 发布:图像在线批处理软件 编辑:程序博客网 时间:2024/06/05 19:15
http://acm.hdu.edu.cn/showproblem.php?pid=4542
这道题时间卡的也太紧了换着打了几种表都不行,看了下别人的表打的都莫名其妙,里面的剪枝也被弄懂,直接绕晕了。。用别人的代码改了改,改天在看这题。。
#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;typedef long long ll;const int N = 50005;//互质数的个数不超过k最大值const ll INF = (((ll)1)<<62)+1;int p[16] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};ll ans, n;//ans表示满足约数为n的反素数,通过多次贪心求的最小值int num[N];//f[N]代表非约数个数为n的最小xvoid table(){ /* num[1] = num[2] = 0; for(int i = 3; i <= N; i++) { num[i] = i; for(int j = 1; j <= (i/2+1); j++) { if(i%j == 0) num[i]--; } num[i]--; } memset(f, 0, sizeof(f)); for(int i = 1; i <= N; i++) { if(f[num[i]] == 0) f[num[i]] = i; }*/ for(int i=1;i<N;i++) num[i] = i; for(int i=1;i<N;i++) { for(int j=i;j<N;j+=i) num[j]--; if(!num[num[i]]) num[num[i]] = i; num[i] = 0; }}void dfs(ll step, ll cur, ll cnt, ll Maxnum)//cur表示当前因子个数所对应的反素数,cnt表示当前因子个数{ if(cnt > n) return; if(cnt==n && cur<ans) ans = cur;//更新最小反素数 ll tmp = cur;//在原先反素数的基础上乘第step个素数 for(int i = 1; i <= Maxnum; i++)//枚举第step个素数的个数 { if(ans / p[step] < tmp || cnt*(i+1) > n) break; tmp *= p[step]; /* tmp*=p[step]; if(tmp>ans || (cnt*(i+1))>n) break;//若乘上这个质因子超过了已知最大反素数,不满足求最小反素数的条件,返回*/ if(n%(cnt*(i+1))==0) dfs(step+1, tmp, cnt*(i+1), i);//下一个质因子肯定个数要比这个少,因子个数累乘 }}int main(){ // freopen("in.txt", "r", stdin); int t, type, Case = 1; table(); /* for(int i = 1; i <= 20; i++) { printf("%d %lld\n", i, num[i]); }*/ scanf("%d", &t); while(t--) { // ans = 0; scanf("%d%lld", &type, &n); if(type == 1) { ans = num[n]; } else if(type == 0) { ans = INF; dfs(0, 1, 1, 62); } printf("Case %d: ", Case++); if(ans == 0) printf("Illegal\n"); else if(ans >= INF) printf("INF\n"); else printf("%lld\n", ans); } return 0;}
0 0
- hdu4542 小明系列故事——未知剩余系(反素数打表待改!!不会!!)
- HDU4542小明系列故事——未知剩余系 (反素数+DFS+打表)
- HDU4542 小明系列故事—未知剩余系
- HDOJ 4542 小明系列故事——未知剩余系(反素数)
- HDU4542-小明系列故事——未知剩余系(数论)
- HDU 4542 小明系列故事——未知剩余系 (DFS 反素数 筛子预处理)
- hdoj 小明系列故事——未知剩余系 4542 (反素数&剪枝) 好题
- HDU4542 未知剩余系 反素数
- HDU 4542 小明系列故事——未知剩余系(反素数+最小的n使得n的约数为n-k(k已知))
- 小明系列故事——未知剩余系
- 小明系列故事——未知剩余系
- 集训队专题(8)1005 小明系列故事——未知剩余系
- HDU 4542 小明系列故事——未知剩余系
- hdu 4542 小明系列故事——未知剩余系 数论
- HDU 4542:小明系列故事——未知剩余系
- hdu 4542 未知剩余系(反素数)
- hdu4542 && ZOJ2562(反素数)
- hdu4542 求反素数
- distpicker使用记录
- 1123. Is It a Complete AVL Tree (30)
- 初识IntelliJ IDEA下JUnit单元测试
- 这篇文章为了请教大牛帮忙解决一下现网乱码问题
- 英雄联盟安装后,游戏界面出现闪屏怎么办??
- hdu4542 小明系列故事——未知剩余系(反素数打表待改!!不会!!)
- 突然间的一个阿里电话面试
- 读《重构》后在android里的一些应用
- SQL数据库中的范式
- Combination Sum
- HttpClient上传、接收图片
- jquery 思维导图
- 1122. Hamiltonian Cycle (25)
- 杭电ACM 2001.计算两点间的距离