数学
wjsay
白色的蜻蜓,在空中忘记了飞行。
我的 github ID: zzuwenjie
展开
-
递归算法之排列问题
#include #include using namespace std;const int N = 5;/***排列问题,对王晓东的《算法设计与分析》3,做了些改动,加入了一个*const int start,可以决定所有排列从第几个元素开始输入,个人觉得*书上的从0开始输出不好(指的是第17行,若我的代码没有被修改)*zzuwenjie 2017-3-8 14:25:07原创 2017-03-08 14:25:54 · 565 阅读 · 0 评论 -
再看 唯一分解定理 UVA Choose and divide
先用线性素数筛筛选出某一范围的素数,然后可以把若干数分解成素数相乘的多项式(大白话:小学五年级的质因子分解)。可以解决组合数问题,避免中间数据太大无法表示的问题。 以 UVA Choose and divide 为例#include #include #include #include using namespace std;const int N = 10000;bo原创 2017-07-27 21:14:13 · 331 阅读 · 0 评论 -
组合数
记录一下这个函数,n个物品中选m个的选法的函数。参数n, m。返回值:选法种数,n,和m不是很大。原创 2017-04-28 17:14:14 · 297 阅读 · 0 评论 -
欧拉函数 Totient Extreme
欧拉函数定义:欧拉函数φ(n), 表示小于或等于n的数中,与n互质的数的数目。欧拉函数求值方法:(1)、φ(1) = 1.(2)、若n是素数p的k次幂,φ(n) = p ^k - p^(k-1) = (p - 1) * p^(k - 1).(3)、若m, n互质,φ(mn) = φ(m)*φ(n).根据欧拉函数的定义,可以求出欧拉函数的递推式:令p为N的最小质因原创 2017-08-21 20:17:54 · 398 阅读 · 0 评论 -
大数阶乘--------------------------南阳理工学院题目28
题目链接:南阳理工学院(虽然我不是在这个OJ提交的,另一个不便透漏)大家都阶乘结果递增很快,若int存数据,很容易溢出,怎么办,怎么办?曾经和大神一块写题时,我发现他用过10000进制。我做这道大数阶乘题时就试了试,没想到效果这么好,计算速度超级快,而且数据可以很大很大。不信看下面用一个一维数组表示一个大数,下标从0,1,2,3,...意为从低位到高位。数组中的每一个元素都表示一个10原创 2017-08-27 16:22:11 · 481 阅读 · 0 评论 -
素数筛选法 O(n) O(nlgn) uva10357 选择与除法
主要介绍两种素数筛选法原创 2016-08-28 15:08:45 · 536 阅读 · 0 评论 -
大数乘法--------------------------51nod1027
10^1000内的两个大数相乘,10^1000000内的大数相乘是5级算法题,有些难,得用快速傅里叶变换。上一篇讲了大数的阶乘,用的是10000进制,这一篇是大数乘法,也是用10000进制做的。模拟中国教学的笔算十进制方法(不同于西方国家),进行大数相乘。比大数的阶乘难了一丢丢,因为阶乘是一个大数乘以一个10000以内的数。而大数乘法是两个1000位(本题)的大数相乘,多了个大数的加法运算原创 2017-08-27 20:49:32 · 493 阅读 · 0 评论 -
洛谷P1423 小玉在游泳 数字危机
这道题不难,就是缓解心情做的,可是测试数据时发现了黑洞。当我测试数据100时,发现不出来答案,接着我测了99, 99.999……,小数点后13个9时还立刻出来答案1794,但是小数点后14个9时,就出现了虚无,啊!!!从微积分的观点来看,调和级数是发散的于无穷的,不应该大于不了100呀!好恐怖。下面是100分的代码 #include<iostream>#includ...原创 2016-09-09 18:58:28 · 1913 阅读 · 0 评论 -
矩阵快素幂 板子
求递推公式的第n项,当n很大时,用矩阵快速幂很有效。时间复杂度O(m^3*logn),m为递推公式跨越了几项。以杭电2017女生专场赛 happy necklace 为例,看如何套板子。分析的递推公式 如图:根据递推公式写出计算an的矩阵,然后套下面板子(计算矩阵乘时,有优化)#define _CRT_SECURE_NO_WARNINGS#include #原创 2017-07-21 09:31:52 · 457 阅读 · 0 评论 -
组合数取模
首先给出组合数计算方法:C(n, m) = n!/m!/(n-m)!.公式中有除数,a / b % m != a % m / b % m. 但是 a / b % m = a * b' % m其中b'是b模m的逆元。求逆元可以用拓展欧几里德。但是当模数m是质数时,可以用费马小定理求逆元。虽然求出来的不一定是最小逆元,对模运算来说,没关系的。费马小定理:a^(m-1) 同余 1 模 m。其原创 2017-10-03 19:14:13 · 502 阅读 · 0 评论 -
UVA 12196 Disgruntled Judge 拓展欧几里德算法
看我手写分析题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001。由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T-1], 输出x[2],x[4]......x[2T]. T//拓展欧几里德用法详见紫书314页#define _CRT_SECURE_NO_WARNINGS#inclu原创 2017-07-27 19:58:41 · 347 阅读 · 0 评论 -
A*算法 hdu1043 Eight 人工智能算法, 还有康拓展开得hash值
hdu1043这道八数码难题,有很多种境界解法。之前网上的博友互相抄袭的代码:离线搜索出所有状态的解,但是这种离线算法需要53MB左右的空间,显然MLE.杭电数据加强后就AC不了了。后来在网上搜到了人工智能在线算法,强行正面搜索,解决了内存限制的问题。时间1s左右。下面这个链接里面有八数码的八种境界。前两种境界我想到了。后面就……URLA*算法,摘自网友。若看不懂,翻书A* 算法的原创 2017-08-11 20:03:41 · 742 阅读 · 0 评论 -
Nim游戏
hihocoder1163Nim游戏,博弈论。这个经典的游戏一开局输赢就定了(计算速度开的高手或者计算机来说)。先手能够在非平衡Nim游戏中获胜,而后手能在平衡的Nim游戏中获胜。(摘自组合数学,里面有二进制分析该游戏)#include #include #include #include #include using namespace std;int main()原创 2017-04-30 18:47:11 · 409 阅读 · 0 评论 -
构造幻方
郑大OJ1091做幻方第一次提交时,幻方的顺序不对,就错了。只有按样例做出的幻方才能过此题。输出格式也后要求,PE展示错误了几次。一下代码实现了la Loubere的构造幻方的方法。其中n为奇数,pic[][]是全局的变量#include #include #include using namespace std;int pic[33][33];void solve(int原创 2017-04-30 21:15:09 · 526 阅读 · 0 评论 -
排列组合
int getTwo(int end, int start) { int ret = 0; for (int i = end; i >= start; --i) { int x = i; while (x != 0) if ((x & 1) == 0) { ret++; x >>= 1; } else break; } return ret;}原创 2017-03-31 19:59:06 · 255 阅读 · 0 评论 -
数字统计问题
输入一个数字n,统计1到n使用了多少个0,1,2,,9。#include#include#includeusing namespace std;void pageNumber(int n, int cnt[]);int main() { int x; while (cin >> x) { int ans[10] = { 0 }; pageNumber(x, ans);原创 2017-03-01 23:11:26 · 421 阅读 · 0 评论 -
FUZ2213 圆的切线问题
http://acm.fzu.edu.cn/problem.php?pid=2213define _CRT_SECURE_NO_WARNINGS#include#includeint main(){ int T; scanf("%d", &T); while (T--) { double x1, y1, r1, x2, y2, r2; scanf("%lf%lf%lf%l原创 2017-07-07 07:48:34 · 408 阅读 · 0 评论 -
玲珑杯round17 A题
sin your life计算sin(x) + sin(y) + sin(y)的最大值,约束条件: x + y + z = n, 3 首先: sin(x) + sin(y) = 2 * sin((x + y)/2) * cos((x - y)/2) 和差化积公式然后看这里:sin(x) + sin(y) + sin(y) = 2 * sin((x + y)/2) * cos((x - y)/2) + sin(n -原创 2017-06-24 15:49:03 · 399 阅读 · 0 评论 -
玲珑杯-射击气球-点到线段的距离
(在线编辑)求点到线段的距离对于空间V-xyz三维几何中点到水平线段的距离,可以投影到xy平面(欧式几何)上。distance = √(∆h ^2 + d ^2);其中d为投影xy平面上的点到线段的距离。线段端点a(x1, y1), b(x2, y2),任一点vxt, yt)。若两端点a,b是否共点d = 两点间距离否则若两端点和任意点v共线(用点积结果判断)若 v原创 2017-04-16 22:51:40 · 515 阅读 · 0 评论 -
母函数
Holding Bin-Laden Captive!母函数应用,虽然有简便解法#include using namespace std;const int maxn = 8000 + 7;long long c1[maxn], c2[maxn];int main(){ int ary[] = { 0, 1, 2, 5 }; int n[10]; while (cin >> n[原创 2017-04-20 22:43:12 · 370 阅读 · 0 评论 -
同余定理 应用于大整数取模
数学上,两个整数除以同一个整数,若得相同余数,则二整数同余(英文:Modular arithmetic;德文:Kongruenz)。同余理论常被用于数论中。最先引用同余的概念与符号者为德国数学家高斯。——摘自 百度百科(a + b)% n = ((a % n) + (b % n)) % n(a - b) % n = ((a % n) - (b % n) + n) % n原创 2017-07-21 19:20:11 · 929 阅读 · 0 评论 -
Suhana and Equation | codechef 几何级数的模和
f(N) = 00 + 11 + 22 + 33 + 44 + ... + NN 求模m的和。N很大,1e9级别,m不是很大,也就几十万。限时1s.先利用取模的性质:(i + m * k) % m = i % m。对f(N)进行等价划分:i ^ i + (i + m) ^ (i +m) + (i +2*m) ^ (i + 2*m) + ... = i ^ i + i ^原创 2017-07-31 16:03:12 · 472 阅读 · 0 评论 -
高斯消元 矩阵求秩
以 杭电zhu and 772002 为例,看高斯消元如何使用矩阵的秩等于矩阵线性无关的列的数量,自由度 = 矩阵列数 - 矩阵的秩。摘自贴吧。线性代数,忘了。好像是通过行变换,得到一个上三角矩阵,求出某一变元的解,然后回迭求解。下面是个例子:#define _CRT_SECURE_ON_WARNINGS#include #include #include usin原创 2017-07-22 08:59:01 · 2972 阅读 · 0 评论 -
福大OJ2273 如何判断点是否在三角形内
刚在想如何给点按逆时针排序,然后用向量积判断是否有负值。还可以这样用面积判断不过很难用精确判断两个浮点数是否相等。 昨日因为机缘巧合,做了一道阿里的实习生编程题。题目很有趣,其中涉及到了如何判断一个点是否在一个三角形内。其中,判断这个问题最简单的方法是面积法。如果一个点在三角形内,其与三角形的三个点构成的三个子三角形的面积等于大三角形的原创 2017-07-22 15:20:11 · 417 阅读 · 0 评论 -
QAQ &火星情报局 哥德巴赫猜想 logn素数判定
我对哥德巴赫猜想还是有点印象的。现代数学中1不在是素数。所以新的哥德巴赫猜想大致如下所述:(针对于大于2的数)对于偶数,可以拆成两个素数的和。对于奇数:若是素数,就不再拆了。若这个奇数可以拆成2和一个素数,那么这个数就可以拆成两个素数的和。否则,剩余的一般奇数可以拆成3个素数的和。不解释。代码中有O(logn)的素数判定方法。#include #include原创 2017-08-11 17:47:47 · 1549 阅读 · 0 评论 -
平面中点的逆时针排序
得知道,夹角是不大于180的角。若点v1先于点v2,则向量ov1 叉乘 向量ov2即 |ov1| * |ov2| * sinθ 大于0.若点v2先于点v1,则向量ov1 叉乘 向量ov2即 |ov1| * |ov2| * sinθ 小于0.重载运算符,就可以对点逆时针排序以POJ2007 为例#include <iostream> #include <cmath>#in...转载 2018-03-24 13:55:12 · 2850 阅读 · 0 评论