算法入門競賽 5.4.2 因子和階乘

重點:

1.數組P[101]:若i爲素數,則P[i]=1,反正,P[i]=0;

2.數組primer[]:依次爲每個素數,2,3,5,7,11...

3.數組result[101]:若2的指數爲i,則result[2] = i;

程序先生成前兩個數組,然後根據輸入n,遍歷i = 2,3,...,n,若其爲素數,則result[i]++;反之,則依次除primer[0,1,2,...]直到爲素數


代碼如下:

#include <iostream>
#include <math.h>
#include <string.h>

#define N 100
int P[N+1];
int primer[N];
int result[N+1];//101

using namespace std;

void GetPrimer();

int main()
{
    GetPrimer();

    int n;
    cin >> n;

    memset(result,0,sizeof(result));

    for(int i=2 ; i<=n ; i++){
        if(P[i] == 1){
            result[i]++;
        }
        else{
            int j = i;

            for(int k=0 ; P[j]!=1 ; ){
                if(j % primer[k] == 0){
                    result[primer[k]] ++;
                    j = j / primer[k];
                }
                else{
                    k++;
                }

            }
            result[j] ++;


        }
    }
    int first = 1;
    for(int i=0 ; i<=n ; i++){
        if(result[i] != 0){
            if(first == 1){
                cout << n << "!=" << result[i];
                first = 0;
            }
            else{
                cout << " " << result[i];
            }

        }
    }
    cout << endl;
    return 0;
}
void GetPrimer()
{
    memset(P,0,sizeof(P));

    P[2] = 1;
    primer[0] = 2;

    int index = 1;

    for(int i=3 ; i<=N ; i++){
        int j=2;
        for( ; j<=floor(sqrt(i)+0.5) ; j++){
            if(i % j == 0){
                break;
            }
        }
        if(j == floor(sqrt(i)+0.5)+1){
            P[i] = 1;
            primer[index++] = i;
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章