j362 - 因數
題目描述
題目要求輸出一個給定整數的所有因數。使用者可以選擇是否包含 1 和該數本身在輸出中,並計算因數的個數和總和。
解題思路
此題採用暴力法,從 1 或 2 開始迴圈到 n-1 (或 n),檢查每個數字是否能整除給定的數 n。如果可以整除,則將其輸出,並累加到因數的個數和總和中。根據使用者輸入的字串 "print" 或 "no",決定迴圈的起始值和是否輸出 n 本身。
複雜度分析
- 時間複雜度: O(n)
- 空間複雜度: O(1)
程式碼
#include <iostream>
using namespace std;
int n,ans,sum;
string s;
int main(){
cin >> n >> s;
if(s=="print"){
for(int i=1;i<=n;++i){
if(n%i==0)ans+=i,++sum,cout << i << "\n";
}
cout << n << "的因數的個數是" << sum << "," << n << "的因數的總和是" << ans;
}
else{
for(int i=2;i<n;++i){
if(n%i==0)ans+=i,++sum,cout << i << "\n";
}
cout << n << "的因數的個數是" << sum << "," << n << "的因數的總和是" << ans;
}
}