这个开始写的时候写的比较挫,求周期的时候就是从1开始一直计算到p^n-1(为了方便下面用N表示了),结果小的数据还行,一旦打一点,比如到了(10,10),那就是10^10-1了,验证一个向量(c1,c2,..,c10!=0)就是要求一个10*10的矩阵求10^10次幂,结果可想而知了...并且,因为要求出所有的,总的计算量还要乘以9*10^9(其中c10不允许等于0的情况)。所以这个计算量是非常大的。
自己也觉得超级不满意,所以就想方设法想要做一点优化,最后就在乘幂的时候采用了蒙哥马利快速求幂算法,算法的思想可以网上搜索,如:
http://blog.csdn.net/smarteryu/article/details/8189185
http://book.51cto.com/art/200812/102582.htm(详细)
http://blog.csdn.net/zhizichina/article/details/7573342
http://hi.baidu.com/guoxianzhuang/item/ac989514885c6d9198ce3358
使得求幂运算由原来的N变为了logN(以二为底N的对数,计算机的孩纸都能看懂吧...),优化的幅度挺大的了。但是依旧觉得挺悲催的,因为对于大一点的数,还是计算不了。或许还有别的思想吧。
这里的基本思想是:
1.先求当前向量构造的矩阵M的N次幂,然后判断是否为单位阵。若是,执行2;否则,不合要求,结束。
2.求M的N