• 最大素因子


    题解报告:NYOJ 520 最大素因子

    描述

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

    输入

    有多组测试数据,每一行输入一个数字n.(0<n<=1000000)

    输出

    在接下来的一行,输出结果.

    样例输入

    2
    3
    4
    5

    样例输出

    1
    2
    1
    3

    解题思路:任何一个不小于2的正整数都可表示成若干个素数乘积的形式,因此通过枚举素数的倍数,即可求出每个数的最大素因子在素数表中排第几,简单打个表,时间复杂度大概为O(nlogn),约等于1.38e07。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e6+5;
     4 int n,pos[maxn];
     5 void init(){
     6     memset(pos,0,sizeof(pos));
     7     for(int i=2,cnt=0;i<maxn;++i){//从2开始
     8         if(!pos[i]){//如果i是素数
     9             cnt++;
    10             for(int j=i;j<maxn;j+=i)//填充素数i的倍数的序号,素数的整倍数的最大素因子可能是该素数,更新素数对应的呈现的次序,如果不是,以后可更新
    11                 pos[j]=cnt;
    12         }
    13     }
    14 }
    15 int main(){
    16     init();
    17     while(cin>>n){
    18         cout<<pos[n]<<endl;
    19     }
    20     return 0;
    21 }

    找最大

    Time Limit: 2000/1000ms (Java/Others)

    Problem Description:

    按顺序输出2到1e6之间每个数(包含2和1e6)的最大素因子(质因子),若为素数则输出本身。

    Input:

    本题没有输入。

    Output:

    每5个数输出一行,数与数之间用一个空格隔开,行末没有空格,最后一行不足5个数自成一行。

    Sample Input:

    无输入

    Sample Output:

    2 3 2 5 3
    7 2 3 5 11
    ...........
    1321 127 37 5
    解题思路:此题思路和上面的一样,只需枚举素数的倍数即可。
    AC代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 const int maxn=1000001;
     5 int prime[maxn];
     6 void get_max_prime_factor(){
     7     memset(prime,0,sizeof(prime));
     8     for(int i=2;i<maxn;++i){
     9         if(!prime[i]){//如果i是素数
    10             for(int j=i;j<maxn;j+=i)
    11                 prime[j]=i;//将i标记为j的可能最大素因子
    12         }
    13     }
    14 }
    15 int main(){
    16     get_max_prime_factor();
    17     for(int i=2;i<maxn;++i)
    18         cout<<prime[i]<<(((i-1)%5==0||i==maxn-1)?'
    ':' ');
    19     return 0;
    20 }
  • 相关阅读:
    python列表--查找集合中重复元素的个数
    python3-打印一个进度条
    python3-sys模块
    python3-字符串操作
    python3-深浅复制
    python3-os模块
    接口和抽象类有什么区别
    集合知识
    面向对象的特征有哪些方面
    javadoc时候乱码-编码 GBK 的不可映射字符
  • 原文地址:https://www.cnblogs.com/acgoto/p/9821994.html
Copyright © 2020-2023  润新知