關於素數的一些題目

2021-06-06 03:40:29 字數 892 閱讀 4191

看了czyuan的總結,決定先找幾道素數的題目玩玩...

首先,判定素數的方法除了暴力列舉到根號n外還有篩法,不要小看,他可以演變出一些題目

for (i=2;i<=maxn;i++)

}短短幾行,可以在0.9s左右篩出一千萬內的素數,應該夠用了

這個題 是篩素數的好題,當然要先知道威爾遜定理.不知道的話搜一下吧.

這個方法的原理是每乙個合數必然有乙個最小的素因子.

同理 根據篩法我們可以求出區間內的尤拉函式

[即尤拉函式φ(n)表示≤n且與n互素的正整數的數目(其實等於僅對1而言,φ(1)=1,1被認為與任何數互素)。

根據公式φ(n)=n*(1-1/p1)(1-1/p2)....(1-1/pk),其中p1、p2…pk為n的所有素因子。

比如:φ(12)=12*(1-1/2)(1-1/3)=4。

利用這個就比較好求了,可以用類似求素數的篩法。

先篩出n以內的所有素數,再以素數篩每個數的φ值。

比如求10以內所有數的φ值:

設一陣列phi[11],賦初值phi[1]=1,phi[2]=2...phi[10]=10;

然後從2開始迴圈,把2的倍數的φ值*(1-1/2),則phi[2]=2*1/2=1,phi[4]=4*1/2=2,phi[6]=6*1/2=3....;

再是3,3的倍數的φ值*(1-1/3),則phi[3]=3*2/3=2,phi[6]=3*2/3=2,phi[9]=.....;

再5,再7...因為對每個素數都進行如此操作,因此任何乙個n都得到了φ(n)=n*(1-1/p1)(1-1/p2)....(1-1/pk)的運算

for (i=2;i1ll*maxn) continue;

for(j=i*i;j1ll*maxn) continue;

for(j=i*i;j

一些關於StringAPI的題目

一 知識點 1.字串 你好北京 中每個字元占用2個記憶體位元組數。字串底層由字元陣列構成,每個字元占用記憶體2個位元組。2.重寫tostring 一般物件都有這個方法,目的是將物件按字串的方式輸出出來。所有物件都繼承了object方法,如果不重寫tostring方法,輸出的就是乙個記憶體位址即雜湊碼...

關於鍊錶的一些題目

2.刪除遞增有序鍊錶中大於min,小於max的元素 3.逆置鍊錶 4.合併兩個鍊錶 4.合併n個鍊錶 分治法 測試 前乙個與後乙個比較,相同就刪除結點,並釋放記憶體。返回頂部 先找到兩個前驅,釋放中間結點,並且將鍊錶重新鏈起來。返回頂部 public listnode reverselist lis...

關於回文數的一些題目

所謂回文數,就是說乙個數字從左邊讀和從右邊讀的結果是一模一樣的,比如12321。判斷一字串是否是回文字串 include include using namespace std int fun string s if i len cout s 是回文字串 else cout s 不是回文字串 ret...