(PAT)L1 006 連續因子

2021-08-15 16:15:12 字數 1055 閱讀 6434

乙個正整數n的因子中可能存在若干連續的數字。例如630可以分解為3*5*6*7,其中5、6、7就是3個連續的數字。給定任一正整數n,要求編寫程式求出最長連續因子的個數,並輸出最小的連續因子序列。

輸入格式:

輸入在一行中給出乙個正整數n(131

)。輸出格式:

首先在第1行輸出最長連續因子的個數;然後在第2行中按「因子1*因子2*……*因子k」的格式輸出最小的連續因子序列,其中因子按遞增順序輸出,1不算在內。

輸入樣例:

630

輸出樣例:

3

5*6*7

初看題沒有思路,在網上找到很多解法,此處運用暴力解法(只看了暴力解法……), 時間複雜度那沒得說肯定很大啦,但是解決這道題沒問題。

思路:首先應該注意到2^31的值為2147483648,13的階乘為6227020800,13!>2^31,也就是說最多只要12個連續的數相乘(不包括1)就能夠達到2^31,題目的要求是找出正整數n的最長連續因子,並輸出最小的連續因子序列,也就是說可以在長度為2到12中找到一些相乘的連續因子,看是否可以被n整除,如果能被整除就可以不斷地更新這個序列,最終得出正確答案。

方法:得到乙個上限值sqrt(n),從2到sqrt(n)依次作為開始值進行尋找,下面**:

#include #include #include using namespace std;

typedef long long ll;

int main()

if(n%ans==0)

} if(flag) break; }

if(flag){

cout<

pat L1 006 連續因子

直接搜尋因子。注意題幹要求因子的乘積不大於n。輸出最小的乘積的因子,即 如果沒有連續的因數,那麼輸出最小的那個因數。include include include include include include include using namespace std typedef long lon...

PAT L1 006 連續因子

l1 006.連續因子 時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 乙個正整數n的因子中可能存在若干連續的數字。例如630可以分解為3 5 6 7,其中5 6 7就是3個連續的數字。給定任一正整數n,要求編寫程式求出最長連續因...

PAT L1 006 連續因子

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 乙個正整數n的因子中可能存在若干連續的數字。例如630可以分解為3 5 6 7,其中5 6 7就是3個連續的數字。給定任一正整數n,要求編寫程式求出最長連續因子的個數,並輸出最小的連...