快速数论变化(NTT)是的原理其实和快速傅里叶变换是一样的原理。 对于形如m= c*2^n+1的费马素数,假设其原根为g。那么瞒住g^(m-1)==1 而且正好(m-1)能整除2^n的。所所以可以在模p域进行NTT变换。旋转因子为 g^((m-1)/n)。其他的原理都和FFT的原理相同。这样可以解决特殊情况下FFT的浮点误差。
/*
* Author: islands
* Create...
分类:
其他好文 时间:
2015-07-31 22:03:42
阅读次数:
169
根据最新分类原则,粪链球菌又叫粪肠球菌。应用C多糖抗原,根据兰氏(Lancefield)血清学分类,可将链球菌分成许多群。粪链球菌属于D群。D群链球菌分肠球菌和非肠球菌两类。前者包括粪链球菌(S.faecalis)、屎链球菌(S.faecium)和坚忍链球菌(S.durans),后者有牛链球菌(S....
分类:
其他好文 时间:
2015-07-11 12:06:07
阅读次数:
153
题目大意:给你两个质数PP和K(2<=P<=109,2<=K<=100000)K (2 <= P <= 10^9, 2 <= K <= 100000),还有一个数A(0<=A<P)A(0<=A<P),求出方程xK=A( mod P)x^K = A (~mod ~P)所有的整数解x∈[0,P?1]x\in[0,P-1]
~
~
~解题思路:首先我们求出PP的原根gg,然后求出tt使得gt=...
分类:
其他好文 时间:
2015-06-15 22:16:57
阅读次数:
135
给定方程 X^A = B (mol C) ,求 在[0,C) 中所有的解 , 并且C为质数。设 rt 为 C 的原根 , 则 X= rt^x (这里相当于求 A^x =B (mol C) 用大步小步算法即可)那么 ( rt^x ) ^ A = b (mol C) rt^Ax = b (mol C.....
分类:
其他好文 时间:
2015-06-12 16:38:18
阅读次数:
93
Description
We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if the set { (xi mod p) | 1 <= i <= p-1 } is equal to { 1, …, p-1 }. For example, the consecutive power...
分类:
其他好文 时间:
2015-06-04 22:54:39
阅读次数:
231
中国剩余定理+原根+扩展欧几里得 题解:http://blog.csdn.net/regina8023/article/details/44863519 新技能get√: 1 LL Get_yuangen(LL p,LL phi){ 2 int c=0; 3 for(int i=...
分类:
其他好文 时间:
2015-06-02 19:44:25
阅读次数:
148
Primitive Roots
Time Limit: 1000MS
Memory Limit: 10000K
Total Submissions: 3219
Accepted: 1858
Description
We say that integer x, 0 i mod p) | 1 <= i <= p-1 } is equa...
分类:
其他好文 时间:
2015-04-25 13:46:16
阅读次数:
119
1. 指数 现在我们就开始为剩余系建立“坐标”,完全剩余系是连续的,剩余类本身就是很好的坐标,所以这里我们只需讨论既约剩余系。前面已经知道\((a,m)=1\)时,总存\(d\)在使得\(a^d\equiv 1\pmod{m}\),满足条件的最小的\(d_0=\delta_m(a)\)称为\(a\....
分类:
其他好文 时间:
2015-04-19 06:22:38
阅读次数:
195
题目大意:给定n(n
求原根,对S集合内每个元素取指标,然后搞出生成函数f(x)
那么答案就是(f(x))^n (mod x^(m-1),mod 1004535809)
上NTT用多项式快速幂搞一搞就好了
#include
#include
#include
#include
#define M 16400
#define MOD 1004535809
#define INF 0x...
分类:
其他好文 时间:
2015-04-15 21:27:51
阅读次数:
158
题意:
给奇素数p,求p有多少原根。
分析:
phi(p-1),数论有具体证明。
代码:
//poj 1284
#include
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)==1){
--n;
int ans=n;
for(int i=2;i*i<=n;++i)
if(n%i==0)...
分类:
其他好文 时间:
2015-04-15 06:10:11
阅读次数:
153