求一個正整數N的因子個數或該正整數N的所有因子之和
如果要求一個正整數N的因子個數,只需要對其質因子分解,得到各質因子$P_i$的個數分別為$e_1$、$e_2、...、e_k$,於是N的因子個數就是$(e_1+1)*(e_2+1)*...*(e_k+1)$。原因是對每個質因子$P_i$都可以選擇其出現$0$次、$1$次、...、$e_i$,共$e_i+1$種可能,組合起來就是答案。而由同樣的原理可知,N的所有因子之和為
$\begin{equation}\begin{split}
&(1+{P_1}+{P_1}^2+\ldots+{P_1}^{e_1})*(1+{P_2}+{P_2}^2+\ldots+{P_2}^{e_2})*\ldots*(1+{P_k}+{P_k}^2+\ldots+{P_k}^{e_k})\\
&={\frac{1-{P_1}^{e_1+1}}{1-P_1}}*{\frac{1-{P_2}^{e_2+1}}{1-P_2}}*\ldots*{\frac{1-{P_k}^{e_k+1}}{1-P_k}}\\
\end{split}\end{equation}$
相關推薦
求一個正整數N的因子個數或該正整數N的所有因子之和
如果要求一個正整數N的因子個數,只需要對其質因子分解,得到各質因子$P_i$的個數分別為$e_1$、$e_2、...、e_k$,於是N的因子個數就是$(e_1+1)*(e_2+1)*...*(e_k+1)$。原因是對每個質因子$P_i$都可以選擇其出現$0$次、$1$次、...、$e_i$,共$e_i+1$種
HDU-1695 GCD(求一個區間內與一個數互質的個數)
題意: 給你一個T,是樣例的個數,接下來是五個數l1,r1,l2,r2,k 前四個數代表兩個區間(l1,r1),(l2,r2)這個題l1=1,l2=1; 取x1屬於(1,r1),x2屬於(1,r2); 求使得gcd(x1,x2)==k 的(x1,x2)的個數,特
java:求一個字串中子字串的個數,簡便演算法
自己想出來的演算法 感覺比較簡單易理解,分享給大家 Scanner ipt=new Scanner(System.in); //輸入長字串str1 String str1
求一個三位數個位,十位,百位的階乘之和等於這個數
01./* 02.*Copyright (c) 2014,煙臺大學計算機學院 03.*All rights reserved. 04.*檔名稱: test.cpp 05.*作 者:李曉凡
[Java]求一個字串中冒號的個數
int count = key.length() - key.replaceAll(":", "&q
任意給定一個正整數N,求一個最小的正整數M(M>1),使得N*M的十進位制表示形式裡只含有1和0。
解決這個問題首先考慮對於任意的N,是否這樣的M一定存在。可以證明,M是一定存在的,而且不唯一。 簡單證明:因為 這是一個無窮數列,但是數列中的每一項取值範圍都在[0, N-1]之間。所以這個無窮數列中間必定存在迴圈節。即假設有s,t均是正整數,且s<t,有 。於是迴圈節長度為t-s。於是10
輸入一個正數x和一個正整數n,求下列算式的值。要求定義兩個調用函數:fact(n)計算n的階乘;mypow(x,n)計算x的n次冪(即xn),兩個函數的返回值類型是double
返回值 %d time data body 一個 pow color printf 題目描述 輸入一個正數x和一個正整數n,求下列算式的值。要求定義兩個調用函數:fact(n)計算n的階乘;mypow(x,n)計算x的n次冪(即xn),兩個函數的返回值類型是d
求一個正整數的階乘
ram -c height white fun mar idt bubuko console 求一個正整數的階乘/* 求一個正整數的階乘。 * 輸入一個正整數,返回它的階乘。 * */ let fact = (function f(num){ "u
c/c++ 求一個整數轉換為二進制數時中‘1’的個數
urn col class 位與 個數 運算 位運算 題目 數字 求一個正整數轉換為二進制數時中‘1’的個數 分析:這道題目就是很簡單的位運算,我們可以把這個整數和1進行&操作(就是二進制數中的最低位與1進行&),然後將這個整數進行右移處理,將下個位置的數字
C語言小結--求一個整數中bit位為1的個數
最近開發需要將一個數據做奇偶校驗,首先就是要計算出這個資料中bit位為1的個數,有以下幾種演算法可以達到要求: 1 方法1 我直接上程式碼,然後分析。 uint16_t get_one_in_data_1(uint16_t data) { uint16_t n = 0
BZOJ3994:約數個數和(莫比烏斯反演:求[1,N]*[1,M]的矩陣的因子個數)
Description 設d(x)為x的約數個數,給定N、M,求 Input 輸入檔案包含多組測試資料。 第一行,一個整數T,表示測試資料的組數。 接下來的T行,每行兩個整數N、M。 Ou
hdu2521(求一個區間因子個數最多的那個數)
/**/ #include <cstdio> #include <cstring> #include <cmath> #include <cctype> #include <iostream> #include <algorithm&
設有n個正整數,將他們連線成一排,組成一個最大的多位整數。 如:n=3時,3個整數13,312,343,連成的最大整數為34331213。
題目描述 設有n個正整數,將他們連線成一排,組成一個最大的多位整數。 如:n=3時,3個整數13,312,343,連成的最大整數為34331213。 如:n=4時,4個整數7,13,4,246連線成的最大整數為7424613。 輸入描述: 有多組測試樣例,每組測試樣例包含兩行,第一行為一
PTA 陣列迴圈左移 (20 分) 本題要求實現一個對陣列進行迴圈左移的簡單函式:一個數組a中存有n(>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向左移m(≥0)個位置,即將a中的
陣列迴圈左移 (20 分) 本題要求實現一個對陣列進行迴圈左移的簡單函式:一個數組a中存有n(>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向左移m(≥0)個位置,即將a中的資料由(a0a1⋯an−1)變換為(am⋯an−
輸入一個正整數n,輸出n!的值。 其中n!=1*2*3*…*n。
問題描述 輸入一個正整數n,輸出n!的值。 其中n!=1*2*3*…*n。 演算法描述 n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個大整數a,A[0]表示a的個位,A[1]表示a的十位,依次類推。 將a乘以一個整
求一個正整數的二進位制表示包含多少1
Java中,int型別佔四位元組,即32位,這裡我們假設正整數n是int型,那麼正整數32的二進位制表示為: 0000 0000 0000 0000 0000 0000 0010 0000 法一:位移法 我們對每一位進行判斷,首先判斷最低位,如果是1,那1的
求一個正整數 倒轉後加上1024的結果.比如 12345倒轉後是54321,加上1024,結果是55345.
public static void main(String[] args) { System.out.println("請輸入一個正整數"); Scanner input = new Scanner(System.in); int sum =
求N個數的階乘相乘素因子個數總和
#include <bits/stdc++.h> using namespace std; bool vis[10000004]; vector<long long>prim; long long maxprim[10000004];//最大素因子 long long num
(轉載)求1到n這n個整數間的異或值(O(1)演算法)
轉自http://www.cnblogs.com/flyinghearts/archive/2011/03/22/1992001.html 問題:求1到n這n個整數間的異或值,即 1 xor 2 xor 3 ... xor n 記 f(x, y) 為x到y的所有整
求一個整數的二進位制中1的個數
題目:輸入一個整數,求該整數的二進位制表達中有多少個1。例如輸入10,由於其二進位制表示為1010,有兩個1,因此輸出2。 分析:這是一道很基本的考查位運算的面試題。包括微軟在內的很多公司都曾採用過這道題。 一個很基本的想法是,我們先判斷整數的最右邊一位是不是1。接著