時間限制
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輸出樣例:
35*6*7
分析:題目告訴我們n小於2的31次方,聯想到階乘,使用我們可以確定最大的因子個數不會超過12個,且所有因子的大小肯定不會超過sqrt(n),
所以我們就假設最大因子長度為12,11,10.......,1的時候從2到sqrt(n),看看最後得到出來的階乘數字是不是n的因子,如果是,那麼我們就找到啦,
我覺得我沒有說清楚,我也不知道大家有疑惑的話可以看看我的**
ps:找到的最長因子序列的乘積一定是n的因子
當n為素數的時候,最長因子序列長度為1,序列為其本身
這是兩個需要注意的地方
具體請參考這個小姐姐的部落格:
這題寫了兩個小時,發現還是小姐姐這個方法比較好。。。。
具體**:
1 #include2 #include3 #include4int 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,要求編寫程式求出最長連續因子的個數,並輸出最小的連...