今天沒事做,我們來寫個部落格,混混等級!
我們以求數的質因子的個數為例來講解。
對於質因子分解最簡單最純粹的暴力我相信大家都會的。
int getnum(int x)
}return ans;
}
但是當處理的資料比較多,而且範圍也比較大的時候顯然這種方式就不再那麼適合了。
既然我們是分解質因子,那麼我們就可以先預處理出在範圍內的所有素數,我們篩的時候用素數來篩選!
#define nn 1000010
bool vis[nn];
int k,p[nn],f[nn];
void init()
{ memset(vis,false,sizeof(vis));
vis[1]=true;
for(int i=2;i*2<=nn;i++)
if(!vis[i])
for(int j=i*i;j<=nn;j+=i)
vis[j]=true;
k=0;
for(int i=2;i當然也可以用這種方式來預處理x小於nn的所有數的質因子個數。
#define nn 1000010
bool vis[nn];
int k,p[nn],f[nn];
void init()
{ memset(vis,false,sizeof(vis));
vis[1]=true;
for(int i=2;i*2<=nn;i++)
if(!vis[i])
for(int j=i*i;j<=nn;j+=i)
vis[j]=true;
k=0;
for(int i=2;i用這種方式來預處理小於nn的所有數的質因子個數的方式,我在本地跑用了大概0.125s。
上面的方式不僅可以求個數,也可以求出他的質因子是那些數。
下面我們來介紹一種很快算出質因子個數的姿勢,但是只能算出個數而已,並不能算出是他的質因子是那些數。
它的思想基於素篩,複雜度和素篩的差不多。
#define nn 1000010
int f[nn];
void init()
{ memset(f,0,sizeof(f));
for(int i=2;i
就是這麼簡單,是不是沒想到呀。當然這種思想還可以求出它不同質因子的個數。處理方式相近,只是多了個if....else..而已
#define nn 1000010int f[nn];
void init()
{ memset(f,0,sizeof(f));
for(int i=2;i
如果有什麼錯誤,還麻煩告訴我一下,我也好修改。
質分解因數 質因子分解
3 參考 分解因數 時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 題目描述 所謂因子分解,就是把給定的正整數a,分解成若干個素數的乘積,即 a a1 a2 a3 an,並且 1 a1 a2 a3 an。其中a1 a2 an均為...
質因子分解
這個東西會在程式執行結尾提示 press any key to continue 用以結束程式。貴在那裡?讓我們來看看system pause 的流程 1 暫停你的程式 2 在sub process中啟動os 3 尋找要執行的命令並為之分配記憶體 4 等待輸入 5 記憶體 6 結束os 7 繼續你的...
分解質因子
in mathematics,the function d n denotes the number of divisors of positive integer n.for example,d 12 6 because 1,2,3,4,6,12 are all 12 s divisors.in ...