最大因子数(铭记)

最大因子数

Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other)
Total Submission(s) : 35   Accepted Submission(s) : 16

Font: Times New Roman | Verdana | Georgia

Font Size:

Problem Description

定义f(n)为整数n的因子数,如f(9) = 3(分别是1,3,9).
定义g(n)=k,整数k是满足f(k) = max{f(i)|0<i<=n}的最小整数,现在给出n让你求g(n).

Input

首先输入一个整数t(t<=10^5)表示测试数据的组数。
接下来t行测试数据每行为一个正整数ai(ai<=10^7)表示要你求g(ai).

Output

对于每个测试数据输出g(ai).

Sample Input

5
1
2
3
4
5

Sample Output

1
2
2
4
4

Author

jxust_acm

Source

xianbin5
// 求1~ai范围内因子最多的那个数,有多个的话求最小的那个
//筛选法求因子数量
//昨天就没想到这方法、不过写出来在我自己电脑里跑了7-8秒、看来我的电脑配置、

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
#define N 10000001
using namespace std;
int dp[N];
void del()
{
    int i,j;
    for(i=2;i<=5000000;i++)
      for(j=i;j<N;j+=i)
        dp[j]++;
    int index=1,max=0;dp[1]=1;
    for(i=2;i<N;i++)
    {
        if(dp[i]>max)
        {
            max=dp[i];
            dp[i]=i;
            index=i;
        }
        else
        {
            dp[i]=index;
        }
    }
}
int main()
{
    del();
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%d\n",dp[n]);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/372465774y/p/2606012.html