随笔分类 -  快速幂取余

摘要:What do I turn?很简单,运用叉积即可得到答案。package com.wangzhu.codeforces;//What do I turn?import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.Scanner;public class Round140Div2 { public static void main(String[] args) throws FileNotFoundExcep... 阅读全文
posted @ 2012-09-25 16:25 qingyezhu 阅读(268) 评论(2) 推荐(0)
摘要:利用矩阵法求f(n),其中f(n)=3*f(n-1)+f(n-2) f(0)=0,f(1)=1接着就是求循环节,即可。求循环节:#include<iostream>#include<stdio.h>using namespace std;typedef long long LL;const LLMOD = 1000000007LL;int main() { LL f0 = 0, f1 = 1, temp = -1; for (LL i = 1;; i++) { temp = (3 * f1 + f0) % MOD; f0 = f1; f1 ... 阅读全文
posted @ 2012-09-16 21:27 qingyezhu 阅读(842) 评论(0) 推荐(0)
摘要:A*B mod C的快速计算方法2009-07-28 17:11:18|分类: 经典算法 |标签: |字号大中小订阅方法一: 大家都能想到,计算A*B的值,然后在计算A*B mod C的值。这是最简单的,但是这个有个弊端,即a*b的值不能太大,太大可能溢出。方法二:回顾进制转换的知识,二进制转换为10进制可以以2的权值相加(貌似是这样描述的)。比如13=(1101)2=1*2^3+1*2^2+0*2^1+1*2^0。同样的,当我们计算A*B的时候,也可以将B化成2^n相加的式子。于是,我们可以将a*b mod c转换成[a*(2^b0+2^b1+……2^bn)] mod c=[a*2^b0+a 阅读全文
posted @ 2011-10-11 18:48 qingyezhu 阅读(742) 评论(0) 推荐(0)
摘要:/* * FZU1759.cpp * * Created on: 2011-10-11 * Author: bjfuwangzhu */#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#define LL long long#define nnum 1000005#define nmax 31625int flag[nmax], prime[nmax];int plen;void mkprime() { int i, j; memset(flag, -1, 阅读全文
posted @ 2011-10-11 16:43 qingyezhu 阅读(602) 评论(0) 推荐(0)