zoukankan      html  css  js  c++  java
  • 【最大因子数】

    最大因子数

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

    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 #include <iostream>
     2 #include <fstream>
     3 #include <stdio.h>
     4 
     5 namespace ismdebug
     6 {
     7     using namespace std;
     8     ifstream cin ("in.dat", ios::in);
     9 };
    10 
    11 //using ismdebug::cin;
    12 using std::cin;
    13 using std::cout;
    14 using std::endl;
    15 /* 前面的命名空间之类的你就别管了 */
    16 /***********************************************************************************/
    17 #define iMAXN 10000200
    18 
    19 int iMapCount[iMAXN];
    20 
    21 void iMakeMapCount()/*这个是一个简单的打表,里面计算的结果是每一个数对应的因子的个数*/
    22 {
    23     for (int i = 0; i < iMAXN; i++)
    24     {
    25         iMapCount[i] = 0;/*初始置为0,因为后面是从1开始的,如果解决浪费时间的话,可以置为1,后面就从2,开始。*/
    26     }
    27 
    28     for (int i = 1; i*2 <= iMAXN; i++)/*打表核心代码段,当i = n的时候,1*n,2*n,3*n,4*n……都是n的倍数,那么n都是他们的因子
    29     那么就继续往后找,只要一直在所求范围里面就够。注意,看到后面的 j+=i了吧。那个很重要的。
    30     */
    31     {
    32         for (int j = i; j <= iMAXN; j += i)
    33         {
    34             iMapCount[j]++;/*表示找到一个倍数,那么就++咯。*/
    35         }
    36     }
    37 }
    38 
    39 void iScanner() /*为什么叫做scanner呢?因为这里是整理,找到之前出现的因子最多的数。*/
    40 {
    41     int iFlag = 1;
    42     int iMaxCount = iMapCount[iFlag];
    43 
    44     for (int i = 2; i < iMAXN; i++)
    45     {
    46         if (iMapCount[i] > iMaxCount) /*找到了存在因为更多的数了,然后替换*/
    47         {
    48             iFlag = i;
    49             iMaxCount = iMapCount[i];
    50             iMapCount[i] = i;
    51         }
    52         else/*悲剧,没有找到啊,那么就用之前最大的来替换他咯,因为是表示这个以及这个之前出现的因子数最多的那个数*/
    53         {
    54             iMapCount[i] = iFlag;
    55         }
    56     }
    57 }
    58 
    59 void iOutputTest() /* 测试输出 iMapCount[] 里面的数值的,后面屏蔽掉了。*/
    60 {
    61     for (int i = 1; i <= 100; i++)
    62     {
    63         cout << i << " " << iMapCount[i] << endl;
    64     }
    65 }
    66 
    67 int main()
    68 {
    69     iMakeMapCount(); /* 第一便打表 */
    70     iScanner(); /*打表完之后进行整理,我称之扫描*/
    71     //iOutputTest();
    72     int t;
    73     scanf("%d", &t);
    74     while (t--)
    75     {
    76         /*打表完成之后就爽了,接下来就输入则输出就是了。同学说iScanner函数可以不用的,但是想过没有,输入数据是很多组,,5000啊,
    77         所以我还是先打表吧。然后scanner、一遍吧。
    78         */
    79         int iNum;
    80         scanf("%d", &iNum);
    81         printf("%d\n", iMapCount[iNum]);
    82     }
    83     return 0;
    84 }
    85 
    86 // end
    87 // ism
  • 相关阅读:
    面试收集—hello,world 也有新花样
    div+css优缺点
    css固定textarea文本域尺寸
    Python if __name__ == "__main__":
    ActionScript3.0基础教程
    【转】Flex代码生成器 (FCG)
    手机第一博文
    TabNavigator只初始化第一个TAB 引发的未初始化对象错误
    如何对待懒惰的小孩
    对孩子真诚就是尊重孩子,不要随意表扬
  • 原文地址:https://www.cnblogs.com/ismdeep/p/2606084.html
Copyright © 2011-2022 走看看