L1 006 連續因子

2021-08-20 07:56:32 字數 1479 閱讀 3982

時間限制

400 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard

作者

陳越

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

輸入格式:

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

輸出格式:

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

輸入樣例:

630
輸出樣例:
3

5*6*7

分析:題目告訴我們n小於2的31次方,聯想到階乘,使用我們可以確定最大的因子個數不會超過12個,且所有因子的大小肯定不會超過sqrt(n),

所以我們就假設最大因子長度為12,11,10.......,1的時候從2到sqrt(n),看看最後得到出來的階乘數字是不是n的因子,如果是,那麼我們就找到啦,

我覺得我沒有說清楚,我也不知道大家有疑惑的話可以看看我的**

ps:找到的最長因子序列的乘積一定是n的因子

當n為素數的時候,最長因子序列長度為1,序列為其本身

這是兩個需要注意的地方

具體請參考這個小姐姐的部落格:

這題寫了兩個小時,發現還是小姐姐這個方法比較好。。。。

具體**:

1 #include2 #include3 #include

4int fun(int n)//

判斷素數513

}14return1;

15}16int

main()

1727 max=(int

)(sqrt(n));

28for(len=12;len>=1;len--)//

根據因子序列的長度來迴圈

2937

if(n%ans==0)//

如果這個乘積是n的因子,那麼這個序列就是我要找的序列

3847

else

4851

}52 flag=1;//

找到目標序列的標誌

53break;54

}55}56

if(flag==1)//

找到了目標序列,跳出迴圈

57break;58

}59}60

return0;

61 }

L1 006 連續因子

乙個正整數n的因子中可能存在若干連續的數字。例如630可以分解為3 5 6 7,其中5 6 7就是3個連續的數字。給定任一正整數n,要求編寫程式求出最長連續因子的個數,並輸出最小的連續因子序列。輸入格式 輸入在一行中給出乙個正整數n 131 輸出格式 首先在第1行輸出最長連續因子的個數 然後在第2行...

L1 006 連續因子

乙個正整數n的因子中可能存在若干連續的數字。例如630可以分解為3 5 6 7,其中5 6 7就是3個連續的數字。給定任一正整數n,要求編寫程式求出最長連續因子的個數,並輸出最小的連續因子序列。輸入格式 輸入在一行中給出乙個正整數n 131 輸出格式 首先在第1行輸出最長連續因子的個數 然後在第2行...

L1 006 連續因子

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