分解質因數

2021-08-15 05:26:03 字數 1203 閱讀 3283

問題描述

求出區間[a,b]中所有整數的質因數分解。

輸入格式

輸入兩個整數a,b。

輸出格式

每行輸出乙個數的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是從小到大的)(具體可看樣例)

樣例輸入

3 10

樣例輸出

3=3

4=2*2

5=56=2*3

7=78=2*2*2

9=3*3

10=2*5

提示先篩出所有素數,然後再分解。

資料規模和約定

2<=a<=b<=10000

思路:先用函式求出10000以內的質數,存到陣列裡。然後用雙層迴圈,外層控制[a,b]範圍,內層有三個,第乙個迴圈作用是直接輸出[a,b]範圍內的質數,第二個迴圈的作用是對非質數的數進行乙個判斷處理,判斷思路:對要分解的數進行除法操作,然後在用if語句判斷是否可以整除,如果可以整除,我們將存到陣列裡(輸出格式需要,我也不知道怎麼處理這種輸出格式,只能用這種笨方法)。假設這個數字第一次可以被(為了方便理解,我用2代替一下)2整除,那麼第二次它也同樣可能2整除,所以我們要將第二個迴圈從新由2的下標開始迴圈。這裡我是用if加上0和1的方式判斷條件,當然整篇**都用了不少這樣的例子。第三個迴圈是對第二個迴圈求出的值按照題目給出的標準的輸出格式輸出。(小白還請多多關照)

#include #include int fun22(int * a)

if(!true_)

a[m++] = i;

} return m;

}void fun21(void)

}if(true_)

continue;

memset(b, 0, sizeof(b));

kk = 0; i = 0;

while (i < k)

if(j == 0 || a[i] > n)

break;

if(true_)

i = 0;

else

i++;

} printf("%d=", n);

for(i = 0; i < kk; i++)

if(n < m)

printf("\n"); }}

int main()

分解質因數

質因數概念 每個合數都可以寫成幾個質數相乘的形式,這幾個質數就都叫做這個合數的質因數。如果乙個質數是某個數的因數,那麼就說這個質數是這個數的質因數。而這個因數一定是乙個質數。演算法原理 先根據需要分解的合數生成乙個質數表。然後依次從小到大依次除合數,每次除之後都將儲存步驟。表達不好,還是看 吧 us...

分解質因數

分解質因數 問題描述 求出區間 a,b 中所有整數的質因數分解。輸入格式 輸入兩個整數a,b。輸出格式 每行輸出乙個數的分解,形如k a1 a2 a3.a1 a2 a3.k也是從小到大的 具體可看樣例 樣例輸入 3 10 樣例輸出 3 34 2 2 5 56 2 3 7 78 2 2 2 9 3 3...

分解質因數

大數的質因數分解一直以來是亟需解決的難題。本文從最基本的試除法開始,分解質因數的方法。下面的程式在開頭定義了乙個巨集opt,如果刪掉這個定義,就可以執行最原始的演算法。一 樸素演算法 include include include using namespace std define opt int...