日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基础编程题之因数分解

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基础编程题之因数分解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 題目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; }

總結

以上是生活随笔為你收集整理的基础编程题之因数分解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。