杭电2521 反素数

来源:互联网 发布:2017好看的日剧 知乎 编辑:程序博客网 时间:2024/04/28 21:40

反素数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4051    Accepted Submission(s): 2346


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
输出为一个整数,为该区间因子最多的数.如果满足条件有多个,则输出其中最小的数.
 

Sample Input
32 31 1047 359
 

Sample Output
26240
Hint
2的因子为:1 210的因子为:1 2 5 10
#include<stdio.h>#include<algorithm>using std::max_element;#define maxn 5000+19int a[maxn],b[maxn];  void func() {   for(int i=1;i<maxn;i++)//打表开小,,一直wa。。。。。无语      for(int j=i;j<maxn;j+=i)        {         a[j]++;        } }  void pri() {     func();     for(int i=1;i<maxn;i++)     {int flag=1;       for(int j=1;j<i;j++)         {          if(a[i]<a[j])          {flag=0;break;}        }        if(flag)        b[i]=a[i];    } };int main(){    pri();    int n;    scanf("%d",&n);    while(n--)    {                int x,y;      scanf("%d%d",&x,&y);        int *pos;        pos=max_element(b+x,b+y+1);       printf("%d\n",pos-b);           }return 0;} 

0 0
原创粉丝点击