HDU2521 反素数【因子数量+打表】
来源:互联网 发布:mysql建立索引 编辑:程序博客网 时间:2024/06/05 11:17
反素数
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6686 Accepted Submission(s): 4001
Problem Description
反素数就是满足对于任意i(0<i<x),都有g(i)<g(x),(g(x)是x的因子个数),则x为一个反素数。现在给你一个整数区间[a,b],请你求出该区间的x使g(x)最大。
Input第一行输入n,接下来n行测试数据
输入包括a,b, 1<=a<=b<=5000,表示闭区间[a,b].
Output输入包括a,b, 1<=a<=b<=5000,表示闭区间[a,b].
输出为一个整数,为该区间因子最多的数.如果满足条件有多个,则输出其中最小的数.
Sample Input
32 31 1047 359
Sample Output
26240Hint2的因子为:1 210的因子为:1 2 5 10
Source
HDU 2008-10 Programming Contest
问题链接:HDU2521 反素数。
题意简述:参见上文。
问题分析:题目为反素数,实际上与素数似乎没有关系,不过是一个定义而已。
关键是计算整数的因子个数,求区间的中的x使得g(x)即x的因子个数为最大。
程序说明:本程序采用ACM题最普通的套路,为避免重复计算就先打表。把功能封装到函数中也是一种值得推荐的做法。
AC的C语言程序如下:
/* HDU2521 反素数 */#include <stdio.h>#define N 5000int apcount[N+1]; /* antiprime count */int getapcount(int n){ int count = 1, i; for(i=2; i<=n/2; i++) if(n % i == 0) count++; /* 因子个数计数 */ if(n != 1) count++; /* 不是1则自身因子需要加上 */ return count;}void setapcount(int n){ int i; apcount[0] = 0; for(i=1; i<=n; i++) apcount[i] = getapcount(i);}int main(void){ setapcount(N); int n, a, b, max, maxval, i; scanf("%d", &n); while(n--) { scanf("%d%d", &a, &b); max = maxval = 0; for(i=a; i<=b; i++) if(apcount[i] > maxval) { maxval = apcount[i]; max = i; } printf("%d\n", max); } return 0;}
阅读全文
0 0
- HDU2521 反素数【因子数量+打表】
- HDU2521:反素数
- HDU2521反素数
- HDU2521:反素数
- HDU2521 反素数【水题】
- HDU2521 反素数
- hdu2521:反素数
- HDU2521:反素数 .
- HDU ACM 2521 反素数 水题+因子打表
- HDU2521——反素数
- 打素数表找因子
- hdu2521 反素数(求约数个数)
- nyoj 最大素因子 520 (反着素数打表)
- HDU4542(反素数+DFS+暴力打表)
- HDU 2521 反素数【打表】
- 1053: [HAOI2007]反素数ant 打表
- BZOJ1053 反素数ant [打表]
- Smith Numbers 素数打表+暴力+求素因子+poj
- 51Nod-1461-稳定桌
- 高阶篇:8.2)模具设计(了解)
- 实现DDD读书笔记1
- 第9章Spark 2.1.0新一代Tungsten优化引擎彻底解析
- OC基础-内存对象管理20
- HDU2521 反素数【因子数量+打表】
- 帧中继(Frame Relay)
- C# Socket的TCP通讯
- 【Leetcode】【python】Hamming Distance, Merge Two Binary Trees
- ssm整合一个user表(配合上一篇的配置文件使用)
- usb中的endpoint(端点)和传输模式
- 51单片机特殊功能寄存器(SFR)介绍
- 中央巡視組進駐北京大學,袁萌為何鳴冤叫屈?
- 基于飞思卡尔微控制器的CAN Bootloader的实现与应用