poj 2478 線性篩素數 尤拉函式

2021-05-27 01:20:20 字數 1130 閱讀 6004

由於2<=n<=10^6,所以一般的求尤拉函式方法用不上,而我們可以根據他的乙個性質

設a為n的質因數,若(n % a == 0 && (n / a) % a == 0) 則有e(n)=e(n / a) * a;若(n % a == 0 && (n / a) % a != 0) 則有:e(n) = e(n / a) * (a - 1)。

進行求解,而現在首要的任務就是求質因數a,我們可以利用線性篩素數時產生的n最小素數,所以首先又要線性篩素數,這個dd以前聽過,但是一直沒有用過,今天利用大半個晚上好好學習了這種o(n)篩法,具體可以看我blog。

**實現:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define ll long long

#define pi acos(-1)

#define n 1000000+10

#define inf 999999999

#define eps 1e-8

//****************************************

//poj 2478

//****************************************

ll dp[n];

ll num,prime[n/3];

ll min_prime[n];

ll cnt;

bool is_prime[n];

void init()

{ ll i,j,k;

memset(is_prime,1,sizeof(is_prime));

cnt=0;

for(i=2;i<=n-10;i++)

{if(is_prime[i])prime[cnt++]=i;

for(j=0;j

尤拉函式 POJ 2478 尤拉篩法

通式 phi x x 1 frac 1 frac 1 frac cdots 1 frac 若n是質數p的k次冪 phi n p k p p 1 p 因為除了p的倍數外,其他數都跟n互質。設n為正整數,以 phi n 表示不超過n且與n互素的正整數的個數,稱為n的尤拉函式值,這裡函式 n n,n n ...

線性方法求尤拉數 POJ2478

1.當需要求1到n的尤拉數之和時用線性方法 本題 2.當需要求單個尤拉數但資料很大用標準方法求 例如 線性的方法求尤拉數 模板 include include define ll long long const int maxn 1000010 int dp maxn ll a maxn int m...

線性篩素數(尤拉篩)

尤拉篩是o n 複雜度的篩素數演算法,1秒內埃篩能處理1e6的資料,而1e7的資料就必須用尤拉篩了。埃篩的基本思想是 素數的倍數一定是合數。尤拉篩基本思想是 任何數與素數的乘積一定是合數 演算法概述 遍歷 2,n 的所有數i,內層迴圈遍歷已經找到的素數prime j 將i prime j 標記為合數...