求乙個數n的因子數和n 2因子數 數論

2021-10-23 04:20:39 字數 2353 閱讀 2274

求乙個數的因子數其實不必列舉1~n 的所有數,比如我求12的所有因子,我列舉到1時,12可以被1整除,同時我就可以知道另乙個數12也是他的因子,同理我列舉到2時,12可以被2整除,另乙個數6也可同時求出……即我們只需列舉到3就可以求出所有的因子了。可以發現,求n的所有因子數,我們只需要列舉到sqrt(n)即可。**如下:

int

query

(int n)

}return ans;

}

唯一分解定理:任何乙個正整數都可以素因子分解為

n = p1 e1 * p2e2 * … * prer; (其中pr是< n 的素數因子)

n的因子個數為:(e1+1)* (e2+1) * ……* (er+1)

因為(ab)2=a2

b2 同理可得:

n2 的因子數為:(2 * e1+1) (2 * e2+1) * …… (2 * er+1)

此外埃氏篩法時間複雜度為o(n log(log n))。

步驟:我們先篩選出sqrt(n)內的素數,然後對n進行素因子分解即可求出n2 的因子數,此方法適用於n比較大時。

需要注意的是:當你輸入的n本身就是乙個大於你所求的長度的素數,他當然不能被0~sqrt(n)的素因子整除,它的素因式分解就是它本身,或者n有兩個因子,乙個在素數表裡,另乙個在sqrt(n)外,故最後要特判一下,如果是那麼n的因子數要再乘以1*(2*1+1)=3!

模板(有詳細注釋)[下面]:

hud1299

主要就是你輸入n,求出n2 的因子數,然後進行進一步求解答案。

其中1<= n <=109,這個資料再來個平方就是1018 是無法用方法一暴力列舉的!

#include

#include

#include

#include

#include

using namespace std;

#define ll long long int

#define max_size 40005

int prime[max_size]

;//裝素數

bool is_prime[max_size]

;//是否素數

intis_prime

(int n)

}return c;

//返回素數的個數

}int

main

(void

) i++

; ans*=(

2*e+1)

;}//ans為n^2的因子數

//printf("%d\n",ans);

if(n>

1) ans*=(

2*1+

1);//別忘了

//此時i==c 即此時的n本身就是乙個大於max_size=40005的素數,沒有乙個數能整除他

printf

("scenario #%d:\n"

,++k);if

(ans%2==

1)printf

("%d\n\n"

,ans/2+

1);else

printf

("%d\n\n"

,ans/2)

;}return0;

}

補充:其實**中素因式子分解過程中,我們也可以不用先通過埃氏篩處理出前sqrt(n)的素數,直接列舉也可以的:

typedef long long ll;

ll get_num(ll x)

}if(x>1)ans*=3;

return ans;

}

如果是多測試並且n比較大是,還是要用先處理出素數表,再對n進行素因子分解比較快。如果是單測試用例,就用此方法,直接sqrt(n)列舉每乙個素因子出來。

你能確保每次整數除的i就是素數?

還真是,怎麼證明呢?比如12的素因子有2(2*6),3(3 *4)。

12=2x2x3.

12%2=0;12/2/2=3;3%3=0;

還是要看素因子分解定理,故「 完全篩去 i 因子(i的k次冪)」。不會組織語言,關鍵還是素因子分解定理:n = p1 e1 * p2e2 * … * prer; (其中pr是< n 的素因子)

再舉個例子,30的素因子為2,3,5。一共有8個因子:1,2,3,5,6,10,15,30。

30/2=15(2是素因子);15%3=0(3是素因子),15/3=5;5%4!=0(4不是素因子);5%5=0(5是素因子);

30=21x31x51 ;

找乙個數的因子個數,因子和

1.所有因子個數 如果乙個數是因數,就不斷除這個數,儲存這個因子次方的數 temp 運用所有因子個數計算公式 見上圖 儲存因子個數的 ans不斷乘 temp 1 注意 當最後,在 x 不斷除因數得到的值有兩種情況 x 1,這說明 x 沒有其他因子了。x 1,這時 x 為其乙個素數因子 且這個因子大於...

求n以內的所有因子數

在網上搜到的都是些求質因子的,剛好今天遇到一道題,題目思路錯了,就碼了乙個求乙個數所有因子的模板。再根據公式n p1 x1 p2 x2 pm xm,pi表示質因子數,xi表示其指數,從而可以看出n的所有因子都是可以通過質因子組合而來,並且有n的因子個數等於 x1 1 x2 1 xm 1 所以該模板的...

求乙個數的因子數及平方數判斷

對於乙個自然數n,都可以分解質因子得到如下形式 怎麼推出來的我也不知道。其中因子數包含自身和1 注意,若要使f n 為奇數,僅有一種可能,就是e1,e2.都為偶數時,總的因子數才為奇數,而若指數都為偶數,說明這個數必定是乙個完全平方數!判斷乙個數是否為平方數 根據數學的等差數列求和公式 由此可知 任...