typedef long long ll;
ll factor(ll n)
}return ans;
}
只需遍歷 1到sqrt(n) 原因是若i為約數,則n / i也為約數計算 40 的因子個數為 8
分別是 1 2 4 5 8 10 20 40
觀察規律 可發現
1 2 4 5 (4
0\sqrt 40
40) 8 10 20 40
從4
0\sqrt 40
40 分開兩側,
當找到(1 2 4 5 )通過 n/i 則可求出
(40 20 10 8 )
**求出 i 為因子 且 n/i!=i,則 ans+=2;
若 (n
\sqrt n
n)為 n 的因子,則 ans+=1;(即求出 i 為因子 且 n/i==i)
例如 計算4的因子個數 為 3 即(1,2,4)
typedef
long
long ll;
ll factor
(ll n)
else ans+=2
;// 如果兩因子不相同,則加2}}
由公式 計算
typedef
long
long ll;
ll factor
(ll n)
ans=ans*
(a+1);
}}if(n>1)
// 當 n 為質數時,答案乘2,例如 17 的因子 只有 1和17
ans=ans*2;
return ans;
}
另附計算因子和
ll sum
(ll n)
ans=ans*
(a*i-1)
/(i-1)
;}}if
(n>1)
ans=ans*(1
+n);
return ans;
}
找乙個數的因子個數,因子和
1.所有因子個數 如果乙個數是因數,就不斷除這個數,儲存這個因子次方的數 temp 運用所有因子個數計算公式 見上圖 儲存因子個數的 ans不斷乘 temp 1 注意 當最後,在 x 不斷除因數得到的值有兩種情況 x 1,這說明 x 沒有其他因子了。x 1,這時 x 為其乙個素數因子 且這個因子大於...
判斷乙個數的素因子個數
有感而發 就寫一下 doge 這裡手動 solemntee include using namespace std typedef long long ll intmain ans if n 1 ans 如果是個素數 n就不會被除到1 cout 輸出乙個非素數的所有素因子 個數 include us...
複雜度更低的求乙個數的所有約數
最簡單的想法是對所有小於這個數的數逐個遍歷取餘是否為0。但是這種方法的複雜度是o n 的,如下 n int input list1 for i in range 1 n 1 if n i 0 print list1 做題的時候往往這樣複雜度過高,我們將遍歷變成 1,n 0.5 求前一半的約數,求出來...