zoukankan      html  css  js  c++  java
  • NYOJ520 最大素因子

    最大素因子

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:2
     
    描述

    i c e最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0.

     
    输入
    有多组测试数据,每一行输入一个数字n.(0<n<=1000000)
    输出
    在接下来的一行,输出结果.
    样例输入
    1
    2
    3
    4
    5
    样例输出
    0
    1
    2
    1
    3
    来源
    hdu改编
     1 /*代码一 :暴力一点一点求的  。。。。华丽丽的超时了
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <iostream>
     5 
     6 using namespace std;
     7 
     8 bool num[1000001];
     9 int prime[500000];
    10 int Is_prime()
    11 {
    12     memset(num, true, sizeof(num));
    13     int count = 1;
    14     num[0] = num[1] = false;
    15     for(int i = 2; i <= 1000; ++i)
    16         for(int j = i * i; j <= 1000000; j += i)
    17             num[j] = false;
    18     for(int i = 2; i <= 1000000; ++i)
    19         if(num[i])
    20             prime[count++] = i;
    21     return 0;
    22 }
    23 
    24 int main()
    25 {
    26     int n;
    27     Is_prime();
    28     while(~scanf("%d", &n))
    29     {
    30         if(n == 1)
    31         {
    32             printf("0\n");
    33             continue;
    34         }
    35         int t = 0;
    36         int cnt = 1;
    37         while(n >= prime[cnt])
    38         {
    39             if(n % prime[cnt] == 0)
    40             {
    41                 n /= prime[cnt];
    42                 t = cnt;
    43             }
    44             ++cnt;
    45         }
    46         printf("%d\n", t);
    47     }
    48     return 0;
    49 }
    50 */
    51 
    52 // 代码二: 参照别人的思路,在素数筛选法中直接求结果
    53 #include <cstdio>
    54 #include <iostream>
    55 
    56 using namespace std;
    57 
    58 const int N = 1000005;
    59 int ans[N];
    60 
    61 // 原理:因为任何数都可以分解为由全部素因子乘积的形式
    62 void prime ()
    63 {
    64     int cnt = 0;
    65     for(int i = 2; i < N; i++)
    66         if(ans[i] == 0)  // 说明 i 是素数
    67         {
    68             ++cnt;  // cnt 记录 素数 i  出现的序数
    69             for(int j = i; j < N; j += i)
    70                //素数的整倍数的最大素因子可能是该素数
    71                 ans[j] = cnt;
    72                 //更新素数对应的呈现的次序
    73         }
    74 }
    75 
    76 int main()
    77 {
    78     prime();
    79     int num;
    80     while(~scanf("%d", &num))
    81         printf("%d\n", ans[num]);
    82     return 0;
    83 }
    功不成,身已退
  • 相关阅读:
    二次冲刺站立会议五
    二次冲刺站立会议四
    二次冲刺站立会议三
    二次冲刺站立会议二
    自己常用网址导航
    Eclipse几个配置
    JVM参数和jvm.log
    JVM性能监控命令
    Linux基本信息查看命令
    Linux IO性能监控工具
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2944572.html
Copyright © 2011-2022 走看看