数论
team79
我在努力。
展开
-
线性时间内筛素数和欧拉函数
学习了下线性时间筛素数和求欧拉函数大部分类容转自点击打开链接原创 2014-08-25 16:08:44 · 934 阅读 · 0 评论 -
poj 2409 polya定理
polya的模板题今天开始刷数论。。。。AC代码如下:原创 2014-07-25 09:17:09 · 611 阅读 · 0 评论 -
lightoj 1007 欧拉函数
公式推导转自:点击打开链接原创 2014-06-10 15:45:43 · 753 阅读 · 0 评论 -
lightoj 1014 数论
就是求p-l有多少个大于l的因子原创 2014-06-10 17:05:46 · 644 阅读 · 0 评论 -
hdu 1286 欧拉函数
求小于N的与N互质的数的个数原创 2014-06-10 16:00:10 · 654 阅读 · 0 评论 -
LA 3882 约瑟夫环(递推)
约瑟夫问题的变种。。。。AC代码如下:#include #include #include #include using namespace std;int n, m, k, ans;int main(){ while( scanf( "%d%d%d", &n, &k, &m ) && !( n == 0 && k == 0 && m == 0 ) ){原创 2014-05-23 15:58:44 · 613 阅读 · 0 评论 -
uva 11300 中位数
设 xi表示第i堆给i-1堆xi个金币(x1表示第一堆给第N堆)设原创 2014-05-14 20:16:55 · 479 阅读 · 0 评论 -
hdu 1041 找规律
/* dp[n] = dp[n-1] + dp[n-2] * 2;*/#include #include #include using namespace std;int dp[1001][501], n;int main(){ memset( dp, 0, sizeof( dp ) ); dp[2][0] = dp[3][0] = 1; for( int i = 4原创 2013-07-17 13:12:17 · 612 阅读 · 0 评论 -
hdu 1042 大数 N!
#include #include #include using namespace std;int f[40001];int main(){ int n; while( scanf( "%d", &n ) != EOF ){ memset( f, 0, sizeof( f ) ); f[1] = 1; int len = 1; for( int i = 2原创 2013-07-17 13:27:28 · 622 阅读 · 0 评论 -
Spoj 1433 数位问题
题目大意: 将 1~N(1结果。例如当 N 为 12 时,答案为:+1-2+3-4+5-6+7-8+9-1+0-1+1-1+2=5 解法分析: 这是一道稍微复杂一点的数位计数问题。 根据上述原则,我们首先探查数位确定,所有数字自由的情况。 若数位数为偶数,以 6 位为例(不妨设第一个符号为+): +0 -0 +0 -0 +0 -0 +0 -0 +0原创 2013-10-05 09:44:19 · 828 阅读 · 0 评论 -
poj 1286 polya定理
模板题注意n==0的情况应该输出0AC代码如下:原创 2014-07-25 09:45:01 · 533 阅读 · 0 评论 -
fzoj 1683 矩阵快速幂
首先构造矩阵0 1 0 0 f00 0 1 0 * f17 2 3 00 0 1 1原创 2014-07-26 12:03:52 · 540 阅读 · 0 评论 -
hdu 2793 矩阵快速幂
构造矩阵 a[1][1] = 0;a[1][2] = 1;a[1][3] = 0;a[1][4] = 0; a[2][1] = 0;a[2][2] = 0;a[2][3] = 1;a[2][4] = 0; a[3][1] = 1;a[3][2] = 1;a[3][3] = 1;a[3][4] = 0; a[4][1] = 0;a[4][2] = 0;a[4][3]原创 2014-08-24 14:53:05 · 1063 阅读 · 0 评论 -
poj 3233 矩阵快速幂
矩阵乘法 AC代码如下:#include #include #include #include using namespace std;const int MAX_N = 33;int MOD, N, K;void multipy( int a[MAX_N][MAX_N], int am, int an, int b[MAX_N][MAX_N], int bm, int原创 2014-07-30 15:16:15 · 677 阅读 · 0 评论 -
poj 3070 矩阵快速幂
AC代码如下:#include #include #include #include using namespace std;const int MAX_N = 3;const int MOD = 10000;void multipy( int a[MAX_N][MAX_N], int b[MAX_N][MAX_N], int c[MAX_N][MAX_N] ){ f原创 2014-07-28 10:33:36 · 571 阅读 · 0 评论 -
foj 1692 矩阵快速幂&&循环矩阵优化
这题首先要构造一个矩阵来模拟原创 2014-07-26 20:06:45 · 672 阅读 · 0 评论 -
hdu 1757 矩阵快速幂
首先构造矩阵:AC代码如下:#include #include #include #include using namespace std;int num[11];int N, MOD;void multipy( int a[][11], int b[][11], int c[][11] ){ for( int i = 1; i <= 10; i++ ){原创 2014-07-27 14:04:41 · 545 阅读 · 0 评论 -
hdu 2276 矩阵快速幂&&循环矩阵优化
AC代码如下:#include #include #include #include using namespace std;const int MAX_N = 110;;int N, M;void multipy( int a[][MAX_N], int am, int an, int b[][MAX_N], int bm, int bn, int c[][MAX_N]原创 2014-07-27 11:24:10 · 639 阅读 · 0 评论 -
hdu 2855 矩阵快速幂
转自:点击打开链接原创 2014-07-27 15:09:43 · 906 阅读 · 0 评论 -
hdu 1575 矩阵快速幂
应用矩阵快速幂之后求和即可AC代码如下:#include #include #include #include using namespace std;const int MAX_N = 11;const int MOD = 9973;int N, M;void multipy( int a[MAX_N][MAX_N], int am, int an, int b[原创 2014-07-27 14:19:01 · 544 阅读 · 0 评论 -
hdu 3117 矩阵快速幂
求前四位的时候直接用公式来求求和四位的时候原创 2014-07-28 16:46:14 · 574 阅读 · 0 评论 -
zoj 3497 矩阵快速幂
这里是Maxtrix67 大牛总结的 第八个矩阵的经典应用:给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值把 给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就 等于从点i到点j恰好经过2条边的路径数(枚举k为中转点)。类似地,C*A的第i行第j列就表示从i到原创 2014-07-26 10:18:25 · 615 阅读 · 0 评论 -
hdu 1210 追踪法求解洗牌问题
网上搜的。。。证明:定理1:当第一张牌(牌1)回到初始位置时,所有的牌都回到了初始位置。证明:设有一次操作,某牌在操作前处于位置r(1将两个式子综合,可以得到r'= (r*2)%(N*2+1);根据同余定理之一 ((i%m)*j)%m=(i*j)%M,可以整理出公式:i次操作后,该牌的位置为:(r*(2^i))%(N*2+1);其中^表示乘方。现在,我们假设经过M次原创 2014-04-28 22:02:57 · 659 阅读 · 0 评论 -
hdu 4662 找规律
找规律......AC代码如下:#include #include #include #include using namespace std;char s[1000001];int main(){ int T, count, flag, length; cin >> T; while( T-- ){ cin >> s; flag = 0; count =原创 2013-08-10 16:31:11 · 649 阅读 · 0 评论 -
hdu 2138 判断素数(Miller-Rabin算法)
太快了。。。。当模版了。。。。AC代码如下:#include #include #include #include using namespace std;__int64 qpow(int a,int b,int r)//快速幂{ __int64 ans=1,buff=a; while(b) { if(b&1)ans=(ans*buff原创 2014-05-13 22:15:18 · 750 阅读 · 0 评论 -
hdu 1098 数学
首先说下 65 | f( x ) 的意思是 f( x ) 能被65整除由公式可以推出:f(x+1) = f(x) + 18 + k * a + m * (18 + k * a);其中m是一个对整个求解没有影响的整数。又 f(1) = 18 + k * a ;所以只需满足 18 + k * a 是65的整数倍....然后 a直接枚举从1到65就行。(超过65就循环了。。原创 2013-08-15 23:21:57 · 672 阅读 · 0 评论 -
hdu 1097 数学
找最后一位的周期即可。AC代码如下:#include #include using namespace std;int main(){ int result[10][4] = { {}, {}, { 6, 2, 4, 8 }, { 1, 3, 9, 7 }, { 6, 4 }, {}, {}, { 1, 7, 9, 3 }, { 6, 8, 4, 2 }, { 1, 9 } };原创 2013-08-15 20:43:51 · 613 阅读 · 0 评论 -
hdu 1071 数学
公式自己推啦......AC代码如下:#include #include #include using namespace std;typedef struct{ double x, y;}Point;int main(){ Point p[4]; int T; double a, b, c, m, n; double area; cin >> T; whi原创 2013-08-15 20:38:26 · 652 阅读 · 0 评论 -
hdu 1019 数学
直接求就行AC代码如下:#include using namespace std;int gcd( int a, int b ){ int temp; if( a < b ){ temp = a; a = b; b =temp; } while( b != 0 ){ temp = a % b; a = b; b = temp; } return a原创 2013-08-15 14:08:15 · 559 阅读 · 0 评论 -
hdu 1021 数学题
好简单....不想说了....AC代码如下:#include #include using namespace std;int f[1000000];int main(){ int n; f[0] = 1; f[1] = 2; for( int i = 2; i < 1000000; i++ ){ f[i] = ( f[i-1] + f[i-2] ) % 3; }原创 2013-08-15 14:15:13 · 613 阅读 · 0 评论 -
hdu 1060 数学
利用logm = n^n则 log(m) = n*log(n)m = 10 ^( n*log(n) )因为10的整数次方的最高位是1,所以只有n*log(n)的小数部分对最高位有影响,而此时已经有log降次,可以直接求。AC代码如下:#include #include using namespace std;int main(){ int T, n; doub原创 2013-08-15 15:21:56 · 525 阅读 · 0 评论 -
hdu 1027 STL
AC代码如下:#include #include #include using namespace std;int main(){ int number[1000], N, M; while( scanf( "%d%d", &N, &M ) != EOF ){ for( int i = 0; i < N; i++ ){ number[i] = i + 1; }原创 2013-08-15 14:53:47 · 632 阅读 · 0 评论 -
hdu 1061 数学
找下周期就行。AC代码如下:#include using namespace std;int main(){ int result[10][4] = { {}, {}, { 6, 2, 4, 8 }, { 1, 3, 9, 7 }, { 6, 4 }, {}, {}, { 1, 7, 9, 3 }, { 6, 8, 4, 2 }, { 1, 9 } }; int N, T, te原创 2013-08-15 15:56:14 · 623 阅读 · 0 评论 -
hdu 1143 数学
这题开始以为f[0]=0半天连给的数据都过不了 然后。。。。然后就过了 还是要运气的。。。。。。AC代码如下:#include using namespace std;int main(){ int f[31]; f[1] = 0; f[0] = 1; f[2] = 3; f[3] = 0; for( int i = 4; i <= 30; i++ ){ f[i] =原创 2013-08-21 15:09:52 · 537 阅读 · 0 评论 -
hdu 1141 数学
log真的是很强大啊 log一下再暴力我就是喜欢暴力AC代码如下:#include #include using namespace std;int main(){ int year; while( cin >> year && year != 0 ){ int temp = ( year - 1960 ) / 10; double sum = 0, max = pow原创 2013-08-21 14:07:32 · 735 阅读 · 0 评论 -
hdu 1099 数学
恶心的输出......AC代码如下:#include #include using namespace std;__int64 gcd( __int64 a, __int64 b ){ __int64 temp; if( a < b ){ temp = a; a = b; b = temp; } while( b != 0 ){ temp = a % b;原创 2013-08-16 00:02:11 · 634 阅读 · 0 评论 -
hdu 1014 数学
暴力遍历一遍就行啊!坑啊!开始我还以为会超时的啊!AC代码如下:#include #include #include #include using namespace std;int main(){ bool mark[100000], flag; int seed, step, mod; while( scanf( "%d%d", &step, &mod ) != E原创 2013-08-16 13:31:18 · 607 阅读 · 0 评论 -
Lightoj 1170 卡特兰数+扩展欧几里得算法
1.预处理先求出1e10范围内的所有完美的数2.一个有n个值的二叉排序树的个数: 先将这n个数排序,然后 可以选第1个数为根,那么就变成了 构造 0个节点的左子树 与 n-1个节点的右子树 选第2个数为根,那么就变成了 构造1个节点的左子树 与 n-2个节点的右子树原创 2014-01-01 19:41:56 · 1079 阅读 · 0 评论 -
hdu 1109 模拟退火
模拟退火。。。。看的别人的思想。。。貌似就是分成N块 在每快内收敛。。。 AC代码如下:#include #include #include #include #include using namespace std;#define MAX 0x3f3f3f3f#define NUM 20//搜索块的大小typedef struct{ double x, y,原创 2013-12-31 10:12:54 · 1008 阅读 · 0 评论 -
Lightoj 1095 容斥原理
直接运用容斥原理,组合数学,P100,机械工业出版社 不过有个地方要注意的就是 a = ( a + b + MOD )% MOD,当a可能为小数的时候,一定要加一个MOD之后再取余 AC代码如下:#include #include #include #include #include using namespace std;#define MOD 100000000原创 2013-12-29 15:09:00 · 908 阅读 · 0 评论