hdu2521
2015-09-03 14:35
381 查看
让你求[a,b]中因子最多的数,如果有一样多的就输出最小的那个。
ps:那个s和b是因为一开始我写的是a和b然后a被数组占掉了就改成start的首字母了不是你们想的那样。
思路的话,如果全部判断是不现实的,5000开方式70点几,所以不会有超过70的单独的因子。
所以在70一下求因子即可,如果遇到另一个因子大于70的再单独加上。
整体思路就是判断1到70是不是那5000个数的因子,如果是的,在判断成对的那个因子是不是大于70。
最后搜一遍取最小的就可以了。
/*02103971 2015-09-03 14:19:56 Accepted 1002 31 MS 1604 KB GNU C++ leso312 */
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
int a[5010];
memset(a,0,sizeof(a));
for(int i=1;i<=70;i++){
for(int j=i;j<=5000;j++){
if(j%i==0){
a[j]++;
if(j/i>70){
a[j]++;
}
}
}
}
int s,b;
int T;
cin>>T;
while(T--){
cin>>s>>b;
int tmp=0,k=0;
for(int i=s;i<=b;i++){
if(a[i]>tmp){
tmp=a[i];
k=i;
}
}
cout<<k<<endl;
}
return 0;
}
ps:那个s和b是因为一开始我写的是a和b然后a被数组占掉了就改成start的首字母了不是你们想的那样。
思路的话,如果全部判断是不现实的,5000开方式70点几,所以不会有超过70的单独的因子。
所以在70一下求因子即可,如果遇到另一个因子大于70的再单独加上。
整体思路就是判断1到70是不是那5000个数的因子,如果是的,在判断成对的那个因子是不是大于70。
最后搜一遍取最小的就可以了。
/*02103971 2015-09-03 14:19:56 Accepted 1002 31 MS 1604 KB GNU C++ leso312 */
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
int a[5010];
memset(a,0,sizeof(a));
for(int i=1;i<=70;i++){
for(int j=i;j<=5000;j++){
if(j%i==0){
a[j]++;
if(j/i>70){
a[j]++;
}
}
}
}
int s,b;
int T;
cin>>T;
while(T--){
cin>>s>>b;
int tmp=0,k=0;
for(int i=s;i<=b;i++){
if(a[i]>tmp){
tmp=a[i];
k=i;
}
}
cout<<k<<endl;
}
return 0;
}
相关文章推荐
- POJ ACM 1001
- POJ ACM 1002
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ-1695-Magazine Delivery-dp
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列
- POJ-1003 Hangover
- POJ-1004 Financial Management
- 用单调栈解决最大连续矩形面积问题
- 2632 Crashing Robots的解决方法
- 1573 Robot Motion (简单题)
- POJ 1200 Crazy Search(简单哈希)
- 【高手回避】poj3268,一道很水的dijkstra算法题
- POJ 1088 滑雪
- poj2387 Til the Cows Come Home—Dijkstra模板
- poj 2485 Highways