素數篩選法和尤拉篩選法

2021-10-18 16:35:05 字數 2302 閱讀 8913

/*

素數判斷:素數篩選法(用素數篩選合數)

*/#include

#include

#define max_n 100

//素數篩選法

int prime[max_n +5]

=;//初始化為0

void

init()

}}}int

main()

printf

("\n");

return0;

}

/*

求2~n內每個數的最小素因子

*/#include

#include

#define max_n 100

int prime[max_n +5]

=;//初始化為0

void

init()

}}}int

main()

return0;

}

/*

素數判斷:線性篩選

*/#include

#include

#define max_n 100

//線性篩選(尤拉篩選)

int prime[max_n +5]

=;//初始化為0

void

init()

for(

int j=

1;j<=prime[0]

;j++)}

}int

main()

printf

("\n");

return0;

}

/*

求第10001個素數

*/#include

#include

#define max_n 200000

//線性篩選(尤拉篩選)

int prime[max_n +5]

=;//初始化為0

void

init()

for(

int j=

1;j<=prime[0]

;j++)}

}int

main()

答案是:104743

/*

求2~n內每個素的質因數個數,如2的質因數個數為2(1,2),4的質因數個數為3(1,2,4)

*/#include

#include

using

namespace std;

#define max_n 100

int prime[max_n+5]

=;int factory_cnt[max_n]=;

void

init()

int tem = i;

int j =1;

int cnt ,ans =1;

while

(tem!=1)

ans *=(

1+cnt)

; j++;}

factory_cnt[i]

= ans;}}

intmain()

printf

("\n");

}

輸出

223

2424

3426

2445

2626

4428

3446

2826

4449

2448

2826

64210

3646

2848

44212

2467

4826

48212

2466

48210

54212

4448

21246

44412

2669

更好的解法

#include

#include

using

namespace std;

intmain()

for(

int j=

1;j<=prime[0]

;j++

)else}}

for(

int i=m;i<=n;i++

)delete

prime;

delete

cnt;

delete

fac;

}

Eratosthenes篩選法與尤拉篩選法

eratosthenes篩選法與尤拉篩選法 由於乙個合數總是可以分解成若干個質數的乘積,那麼如果把質數的倍數都去掉,那麼剩下的就是質數了.eratosthenes篩選法的思想特別簡單 對於不超過n的每個非負整數p,刪除2p,3p,4p,當處理完所有數之後,還沒有被刪除的就是素數.如果用vis i 表...

篩選法求尤拉函式

可以借鑑之前的求質因數分解的線性求法。對於要求1 n上的尤拉函式的和 尤拉函式定義如下 那麼 pi n 等於多少呢?由定義可以知道,尤拉函式和質因子的次方無關。因此這時候要分類討論 1.pi 如果是n的質因子,那麼 pi n pi n 2.如果不是,pi n pi n pi 1 pi 實現如下 in...

質數篩選 素數篩選法

int prime 100010 void prime for int i 1 i i 1000000 i define size 1000000 int main 元素值為0代表是素數 int prime size int pos 0 int flag for int i 2 i size i p...