基础编程题之因数分解
生活随笔
收集整理的這篇文章主要介紹了
基础编程题之因数分解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目1
- 解題思路
- 代碼
- 題目2
- 解題思路
- 代碼
題目1
牛客
解題思路
首先對于求素數,因數分解這類的題目,搜索范圍一般是[2,sqrt(a)]
因為數學中:假設a合數,并且a == b * c,其中b、c中必定有一個 ≤ sqrt(a),不可能出現b、c同時大于a
對于這一題,還有一點要注意的是,當我們把a的所有2因數都分解出來后,2的倍數(4、6、8…)都不可能再分解出來,比如100分解出2 x 2后,無法再分出2的倍數,同樣分解出所有3因數后,則無法再分出3的倍數…
因此我們可以:在[2, sqrt(a)]區間從小到大逐漸試探的時候,碰到一個分解的因數時a,就一直分解a,直到不能再分解a,此時也不可能再分解出a的倍數。
代碼
// write your code here cpp #include <iostream> #include <cmath> #include <cstdio> using namespace std;int main() {int input;while(cin >> input){printf("%d = ",input);for(int i=2 ;i<=sqrt(input);i++){while((input % i == 0)){if(input/i==1)//最后一個數字,特殊輸出{break;}printf("%d * ",i);input/=i;}}printf("%d\n",input);}return 0; }題目2
牛客
解題思路
這個題和上一題基本一致,只不過上一題要寫出完整的表示形式,而這一題需要輸出不重復的因子的個數,代碼中只需要稍微修改一部分。先判斷是否是因子,如果是使用while循環處理能被這個因子整除的情況
代碼
#include <iostream> #include <cmath> #include <cstdio> using namespace std;int main() {int input;while(cin >> input){int number=0;for(int i=2 ;i<=sqrt(input);i++){if(input % i == 0)number++;while(input % i == 0)//就像36,不要有重復的因子input/=i;}if(input > 1)//如果不等于1,說明還有一個因子number++;cout<<number<<endl;}return 0; }總結
以上是生活随笔為你收集整理的基础编程题之因数分解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言重点难点精讲】C语言预处理
- 下一篇: asp.net 调用带证书的webser