原根 FFT練習題

2021-08-28 07:14:09 字數 1747 閱讀 3744

51nod 1135

題目描述

求小於1e9的素數p的原根

#include using namespace std;

int pi[40];

int tot=0;

int power(int x,int n,int p)

n>>=1;

base=1ll*base*base%p;

} return ans;

}int main()

} if(x!=1)pi[++tot]=x;

for(int i=2;iloj 6156

題目描述

這是乙個非常簡單的問題。

wmq 如今開始學習乘法了!他為了訓練自己的乘法計算能力,寫出了 n

nn 個整數,並且對每兩個數 a,b

a,ba,

b 都求出了它們的乘積 a⋅b

a\cdot b

a⋅b。現在他想知道,在求出的n(n

−1)2

​\frac​

2n(n−1

)​​​​ 個乘積中,除以給定的質數 m

mm 餘數為 k(0

≤k

k(0\leq kk(

0≤k的有多少個。

#include using namespace std;

typedef complexe;

typedef long long ll;

const double pi=acos(-1.0);

int power(int x,int n,int p)

return ans;

}int n,m;

int p[40];

int tot;

int g;//原根

int to[60007];//i->g^j

int from[60007];//g^j->i

int cnt[60007];

e a[1<<18];

int r[1<<18];

ll ans[60007];

void fft(e a,int op,int n)

e ( double r , double i ) : r ( r ) , i ( i ) {}

e operator + ( const e& p ) const

e operator - ( const e& p ) const

e operator * ( const e& p ) const

} ;int p;

int g;//原根

double a[100007],b[100007];

int to[100007];//i->g^j

int from[100007];//g^j->i

e a[1<<20],b[1<<20];

int r[1<<20];

void fft(e a,int op,int n)

for(int i=p-1;imul=1;

for(int i=0;ifor(int i=p-1;ifft(a,1,len);

fft(b,1,len);

for(int i=0;ifft(a,-1,len);

for(int i=p-1;i<=2*p-4;i++)a[i].r+=a[i%(p-1)].r;

for(int i=p-2;i<=2*p-4;i++)

for(int i=0;iprintf("\n");

}}

一道fft練習題

考場上想到的o n 2 o n 2 o n2 暴力 記f i j f i j f i j 表示前i個位置,長度為j的連擊出現的期望次數 記g i j g i j g i j 表示第到i個位置為止,目前連擊次數為j的概率 轉移時有一些細節 include using namespace std con...

python書中練習題 python練習題

1 定義乙個空列表,接收從鍵盤輸入的整數,把列表傳給乙個從大到小排序的函式,再輸出排序後的列表的值 listex b 0 a int input 請輸入列表長度 while b a num int input 請輸入字元 b 1 print listex sum 0 for i in range 0...

python的練習題 Python練習題

1 使用while迴圈輸入1 2 3 4 5 6 8 9 10 i 0while i 10 i i 1 if i 7 continue print i 結果 e python python python test.py1 2 求1 100的所有數的和 i 0sum 0 while i 100 i 1...