尤拉計畫3 找出乙個合數的最大質數因子

2022-08-26 00:33:16 字數 1478 閱讀 9043

由於數學太差了,來搞搞pe,先從水題做起。

題意:13195的質數因子有5,7,13和29.

600851475143的最大質數因子是多少?

這裡可以肯定的是:1.數字很大,絕對不能暴力。2.如果這是一到oj題,那麼我們的目的就是盡量縮小這個數,減少計算量。

我們都知道,任何乙個合數都是可以由他的所有質因素相乘得到的,比如15=3*3*3*3*3,12=2*2*3,60=2*2*3*5.(這些數都是我隨便想的),好的,我們先看乙個比較小的數60,現在我們要找它的最大質因子,我們可以從最小的奇數開始列舉(當然要先列舉2這個特殊的質數,除此之外的偶數可能是質數嗎?),如果可以整除說明這個奇數是其因子之一,然後判斷這個奇數如果是質數,那麼它就是其中乙個質因子。然後原數就可以除這個因子了,為了排除已經找到的因子,我們一直將它除這個數,直到不能整除,60/=2得30,30/=2得15,到此結束此因子,我們就找到了2這個質因子;同理,到3的時候15/=3得5,找到了3這個質因子;5/5=1,可以結束,5就是我們要找的最大質因子啦。如果是多測試的話一直頻繁判斷素數是不是有點不爽?所以我們可以打個素數表- -。還有乙個優化就是這個素數不會超過sqrt(n),可以減少迴圈次數,至於證明自己搜吧。

下面給出算尤拉計畫的**:

1 #include2

3#define pause system("pause");45

using

namespace

std;

67 typedef long

long

ll;8 typedef unsigned long

long

ull;910

const

int maxn = 100000000;11

int prime[maxn],cnt_prime=0;12

bool

isprime[maxn];

1314 inline void show(int *ary,int

n)15

1920

void getprime(int

max)

2133}34

}3536 cnt_prime=0;37

for(int i=2;i<=max;i++)

3843}44

}4546int

findit(ull num)

4757

else

58 lastf = 1;59

60 f=3;61

for(int i = 2; num > 1 && f < m; i++)

6272}73

74if(num==1)75

return

lastf;

76else

77return

num;78}

7980

intmain()

81

執行結果:

6857

0.001000 sec

尤拉計畫3 找出乙個合數的最大質數因子

題目 13195 的質數因子有 5,7,13 和 29。600851475143 的最大質數因子是多少?分析 剛開始寫的時候,很麻煩,首先寫了乙個prime函式,然後又在主函式裡寫了乙個迴圈來更新max 迴圈i從2到n,找出n的每乙個質因數 這樣一來,對於這道題,即便是long long型別有可能輸...

關於尤拉公式證明的乙個延拓

現在,我們通過幾種不同的方法來闡述下尤拉公式的證明思想,即證明,e i 1 0.首先指數函式是定義在實數域上的,現在要延拓到複數域上,首先要定義e i,e ix是什麼,嚴格地說,這是一種定義,而且,這個定義是合理的.e ix cosx isinx,e是自然對數的底,i是虛數單位,他將三角函式的定義域...

Python找出乙個數的最大質因素

舉例 首先我們來看個例子 13195的質因數為 5,7,13,29,其中29就是最大的質因數,現在讓我們來計算600851475143的最大質因素。from math import sqrt 質數判斷 def isprime n for i in range 2,int sqrt n 1 if n ...