建立質數表

 

輸入數字

質數小到大,判別是否能整除輸入

若能,則不斷除,並記錄該數及次數

直到所餘數字的平方根 < 測試質數時

輸出

 

依次數判別輸出型態

因為最後不用輸出 * 

故分開輸出

 

 

#include <iostream>
#include <cstring>
#include <cmath>

 

 

#define MAX 1000
#define Pri_Max 170

using namespace std;

bool* bprime = new bool[MAX];
int  prime[Pri_Max];

void setPrime()
{
    memset(bprime, true, MAX);
    memset(prime, 0, Pri_Max*4);

    bprime[0] = bprime[1] = false;

    for(int i = 2, j = 0; i<MAX; i++)
    {
        if(bprime[i])
        {
            prime[j++] = i;
            for(int k = i; k<MAX; k+=i)
                bprime[k] = false;
        }
    }
    delete []bprime;
}

int main()
{
    setPrime();

    int num;
    int factor[15], exponent[15];
    int i, j;

    while(cin >> num)
    {
        for(i = 0, j = 0; prime[i] <= sqrt(num); i++)
        {
            //記錄次數與因數
            if(num%prime[i] == 0)
            {
                factor[j] = prime[i];
                exponent[j] = 0;

                while(num%prime[i] == 0)
                {
                    num /= prime[i];
                    exponent[j]++;
                }
                j++;
            }
        }

        if(num > 1)
        {
            factor[j] = num;
            exponent[j] = 1;
            j++;
        }

        for(i = 0; i<j-1; i++)
        {
            cout << factor[i];
            if(exponent[i] != 1)
                cout << '^' << exponent[i];
            cout << " * ";
        }
        cout << factor[j-1];
        if(exponent[j-1] != 1)
                cout << '^' << exponent[j-1];
        cout << endl;
    }
    
    return 0;
}

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(0) 人氣()