数论
ehi11
这个作者很懒,什么都没留下…
展开
-
Count prime hoj 区间求素数个数(大范围)
/*区间筛素数 简述:有的时候,我们需要知道某个特定区间的素数(区间大小较小,但数可能很大)。 那么数组就开不下,这时候我们仍然可以使用筛法,只是所有的下标都进行了偏移。 大家理解下面这段代码可以先用普通筛法写,然后数组下标集体移动即可。*/#include #include #include const int maxn = 1000001;int Pri原创 2012-08-21 20:25:51 · 5185 阅读 · 1 评论 -
Fibonacci hoj 矩阵快速幂裸题
#include #include const int mod=10000;int A[3][3],ans[3][3];void mul(int a[][3],int b[][3]){ int tmp[3][3]; for(int i=1; i<=2; i++) for(int j=1; j<=2; j++) { t原创 2012-09-13 16:06:00 · 708 阅读 · 0 评论 -
poj 3233 Matrix Power Series 矩阵快速幂
/*愧疚了,好久没写什么有意思的题了。这道基于二分的矩阵连乘,方法很经典。求幂二分,求和再二分。经典。求幂的时候,若奇数,A^n=A^(n/2)*A^(n/2)*A.偶数时 A^n=A^(n/2)*A^(n/2)。求和的时候,若为奇数,A^1+A^2+...+A^(2*m+1)=(A^1+...+A^m)+(A^1+...+A^m)*A^m*A,若为偶数 A^1+A^2+...+A^原创 2012-09-12 21:32:44 · 868 阅读 · 0 评论 -
Goldbach's Conjecture map+素数表
#include #include #include #include using namespace std;const int maxn=1000001;map mp;int p[maxn];bool vis[maxn];int t,n;void get_prime(){ memset(vis,false,sizeof(vis)); memset(p,0原创 2012-09-07 22:28:41 · 1010 阅读 · 0 评论 -
Factoring Large Numbers
/*一个数必定可以分解成一些素因子的乘积。从2开始,没扫面到一个能被n整除的数。就进行n/=i,否则,i++,如果遇到i*i>n,则此时的n必是最后一个素因子。输出。结束。*/#include int main(){ long long n; while(scanf("%lld",&n)==1) { if(n==-1) break;原创 2012-09-05 15:43:59 · 677 阅读 · 0 评论 -
Relatives 欧拉函数基础
#include int phi(int n){ int rea=n; for(int i=2;i*i<=n;i++) if(n%i==0) { rea=rea-rea/i; do n/=i; while(n%i==0); } if(n>1) rea=rea-rea/n;原创 2012-08-22 22:18:45 · 1178 阅读 · 0 评论 -
Raising Modulo Numbers 快速幂取模基础
#include #include long long quick_mod(long long a,long long b,int m){ long long ans=1; while(b) { if(b&1) { ans=(ans*a)%m; b--; }原创 2012-08-22 22:17:52 · 581 阅读 · 0 评论 -
Team Mate 抽屉原理
/*题意就是给你n个人,从中选出m个人,使其总和为n的倍数。这个题为明显的抽屉原理。首先,预处理一个数组s记录前i项和,i:1-n。若前i项和中有一项能被n整数,则符合题意输出一种方案。否则,n个s[i]中必定至多有n-1中余数,即至少两个Si同余。则将他们找出,输出两个下标中间的项即为符合题意的方案。*/#include #include int s[10001];int a[10原创 2012-08-23 08:02:43 · 1648 阅读 · 0 评论 -
Calculation 2 欧拉函数的应用
/*题意是求和n不互质的数的总和。可用总和1-(n-1)减去互质的数的总和。课用欧拉函数求1-n的互质的数的个数num。则若a和n互质,n-a必定也和n互质(a<n)。也就是说num必定为偶数。其中互质的数成对存在。其和为n。则总和为num*n/2 */#include int phi(long long n){ int rea=n; for(int i=2;i*i<=原创 2012-08-23 07:55:49 · 1752 阅读 · 0 评论 -
Divisors 欧拉函数的应用
#include #include #define mm 500bool fuck[mm];int wokao[mm][100];long long ca[mm][mm];int p[100];int main(){ int t=0,x,n; memset(fuck,0,sizeof(fuck)); fuck[0]=fuck[1]=0; for(in原创 2012-08-23 07:51:25 · 1626 阅读 · 0 评论 -
Calculation 快速幂
/*本来是稍有复杂的数学题。第一次用快速幂取模果断超时,最后将表打出,找规律。水过之,代码很短。*/#include int main(){ int a,b; while(scanf("%d%d",&a,&b)==2) { int ans=0; int sum=0; if(a%2==0) {原创 2012-08-22 22:40:32 · 533 阅读 · 0 评论 -
Weights 快速幂取模的应用
/*题意为求3^0+3^1+3^2...+3^(n-1)。可以先根据等比求和公式写出值。(3^n-1)/2,求该数对p的mod。令(3^n-1)/2=k*x+p.最后推出公式。*/#include #define p 9999997long long quickmod(long long a,long long b,long long m){ long long ans=1;原创 2012-08-22 22:37:24 · 534 阅读 · 0 评论 -
Visible Lattice Points 欧拉函数应用
/*根据题意。如果该点是不可见的。则必定经过整数点。也就是非互质。相反,如果是可见的,那么必定是互质的。则题目转为求1-n内的互质点对数。即为求1-ai(i:1-n)内的欧拉函数值。可现在1-n的范围内用递推打表生成欧拉函数值。*/#include const int maxn=1001;int phi[maxn];void get_phi()//获取1-maxn范围内的欧拉函数表{原创 2012-08-22 22:27:53 · 1352 阅读 · 0 评论 -
大数区间筛素数 线性
const int N=1000010;int prime[N], np;bool vis[N];void get_prime(int l,int r){ np = 0; memset(vis, 0, sizeof(vis)); for (int i = 0; i <r-l+1; ++i) { if (!vis[i]) prime[np++]原创 2012-08-21 20:27:40 · 1113 阅读 · 0 评论 -
Prime Judge hoj Miller Rabin算法
#include #include #include using namespace std;long long ans;void power(long long a,long long b,int n){ //快速幂取模a^b%n if(b==1) { ans = a; return; } power(a,b/2原创 2012-08-21 20:29:25 · 693 阅读 · 0 评论 -
Number Sequence hdu 构造矩阵乘法
/*题目所给的a,b和f的初始值很重要。一次来确定矩阵的元素和幂。[a b1 0]×[f(n−1)f(n−2)]=[f(n)f(n−1)][a b1 0]n−2×[11]=[f(n)f(n−1)]因为f[1]=1,f[2]=1,所以递推到n-2次幂,间接矩阵为1,1.如果初始条件改变的话,次幂也间接矩阵也会随之改变。要灵活应用。*/#include #include const原创 2012-09-22 09:00:28 · 917 阅读 · 0 评论