洛谷p1919 :
fft :
#include#include#include#includeconst int n=1e6+10;
const double pi=acos(-1.0);
struct cp ;
} cp friend operator - (cp a,cp b) ;
} cp friend operator * (cp a,cp b) ;
}} a[n],b[n];
int r[n];
int lim,n,m;
int l;
int cnta,cntb;
void fft(cp *l,double f)
fft(a,1.00);
fft(b,1.00);
for(int i=0; i<=lim; i++)
fft(a,-1.00);
for(int i=0; i<=n+m; i++)
int f=0;
for(int i=n+m+1;i>=0;i--)
return 0;
}
ntt :
#include#define ll long long
using namespace std;
const int maxn=2e6+10;
const int mod=998244353; //使用ntt需要保證模數mod 為質數
const ll pr=3;
//3是998244353的原根,在比賽中請用上面那個演算法提前算出....
ll f1[maxn],f2[maxn],u,v;
ll wn[50],r[maxn],n,m,n,m,l;
ll power(ll bs,ll js)
return s;
}void getwn()
int f=0;
for(int i=n+m+1;i>=0;i--)
return 0;
}
洛谷p3803 :
fft :
#include#include#include#includeconst int n=1e7+10;
const double pi=acos(-1.0);
struct cp ;
} cp friend operator - (cp a,cp b) ;
} cp friend operator * (cp a,cp b) ;
}} a[n],b[n];
int r[n];
int lim,n,m;
int l;
int cnta,cntb;
void fft(cp *l,double f)
fft(a,1.00);
fft(b,1.00);
for(int i=0; i<=lim; i++)
fft(a,-1.00);
for(int i=0; i<=n+m; i++)
return 0;
}
ntt :
#include#define ll long long
using namespace std;
const int maxn=1e7+10;
const int mod=998244353; //使用ntt需要保證模數mod 為質數
const ll pr=3;
//3是998244353的原根,在比賽中請用上面那個演算法提前算出....
ll f1[maxn],f2[maxn],u,v;
ll wn[50],r[maxn],n,m,n,m,l,ans[maxn];
ll power(ll bs,ll js)
return s;
}void getwn()
ntt配套的求原根演算法:
#include#define ll long long
#define il inline
#define rg register
using namespace std;
ll prm[1000],tot,n,root;
ll power(ll bs,ll js,ll mod) return s;
}il ll getroot(rg ll n)
}if(tmp != 1)prm[++tot] = tmp; //質因數分解
for(rg ll g = 2; g <= n-1; g ++)
}if(flag)return g;
}return 0; //無解
}int main();
}cp friend operator - (cp a,cp b) ;
}cp friend operator * (cp a,cp b) ;
}} a[n],b[n];
ll r[n];
int lim,n,m;
int l;
int a[n];
ll num[n],sum[n];
void fft(cp *l,double f)
fft(a,1.00);
for(int i=0; i<=lim; i++)
fft(a,-1.00);
for(int i=0;i<=len+len;i++)
for(int i=0;i2019 上海網路賽 :
#include#define ll long long
using namespace std;
const int n=4e5+10;
const double pi=acos(-1.0);
struct cp ;
} cp friend operator - (cp a,cp b) ;
} cp friend operator * (cp a,cp b) ;
}} a[n],b[n];
ll r[n],sum[n],ans;
int lim,n,m,cnta,cntb,cntc;
int l;
int aa[n],bb[n],cc[n],a[n],b[n],c[n];
void fft(cp *l,double f)
fft(a,1.00);
fft(b,1.00);
for(int i=0; i<=lim; i++)
fft(a,-1.00);
for(int i=1; i<=c[n-1]; i++) sum[i]=(ll)(a[i].x/lim+0.5)+sum[i-1];
ans=0;
for(int i=0; ifor(int i=0; ifor(int i=0; ireturn ans;
}int main() else
} return 0;
}
模板 FFT與NTT高精度乘法模板
fft高精度乘法 與ntt高精度乘法 搞得不甚明了,不予解釋 fft include include include includeusing namespace std const int maxn 300000 const double pi 3.1415926535 typedef compl...
任意模數ntt 模板篇 NTT和三模數NTT
之前寫過fft的筆記.我們知道fft是在複數域上進行的變換.而且經過數學家的證明,dft是複數域上唯一滿足迴圈卷積性質的變換.而我們在oi中,經常遇到對 x取模的題目,這就啟發我們可不可以在模運算的意義下找乙個這樣的變換.然後我們發現有個神奇的東西,原根 g 這東西在模意義下相當於單位復根 e 所以...
多項式的基本運算 FFT和NTT 總結
設參與運算的多項式最高次數是n,那麼多項式的加法,減法顯然可以在o n 時間內計算。所以我們關心的是兩個多項式的乘積。樸素的方法需要o n 2 時間,並不夠優秀。考慮優化。方案一 分治乘法。對於多項式x,y,假設各有2m項,即最高次數是2m 1 x,y分別可以用兩個含m項的多項式來表示,即 則由此可...