摘要:
前几天,我发表了一篇随笔:“BigArithmetic - 提供任意精度的算术运算的静态类”。现在,让我们使用 BigArithmetic 类来计算圆周率。我们需要一个计算 π 的分析算法。有用的算法是二次收敛的,即每一次迭代使有效位数增加一倍。计算 π 的二次收敛算法是基于 ACM 法(算术几何平均法)。
阅读全文
07 2008 档案
摘要:Timus 1005. Stone pile 要求将若干石头分为两堆使其重量差最小。这道题是说,给你一堆石头,总数在 1 到 20 之间,每个石头的重量在 1 到 100,000 之间。要求你将这堆石头分成两堆,使这两堆石头的重量差最小,并输出这个重量差。
阅读全文
摘要:我在“浅谈 BigInteger”的随笔中实现了一个 Skyiv.Numeric.BigInteger 类,那时乘法是使用常规的 O(N2) 的算法,所以比 .NET Framework 3.5 Base Class Library 中的 System.Numeric.BigInteger 类稍慢,后者的乘法是使用 Karatsuba 算法,其时间复杂度约为 O(N1.585)。
阅读全文
摘要:在上一篇随笔“使用快速傅里叶变换计算大整数乘法”中,已经讲述了使用快速傅里叶变换计算大整数乘法的原理。在这一篇随笔中,我们就使用快速傅里叶变换来实现一个提供任意精度的算术运算的静态类:BigArithmetic。
阅读全文
摘要:
我们知道,两个 N 位数字的整数的乘法,如果使用常规的算法,时间复杂度是 O(N2)。然而,使用快速傅里叶变换,时间复杂度可以降低到 O(N logN loglogN)。
阅读全文

摘要:Timus 1603. Erudite 要求解一个字谜。这个题目首先给出一个 4x4 的字谜,然后给出许多单词,要求你判断这些单词是否能够由前面的字谜组成。规则是,你能够在字谜中上下左右行走,也能够拐弯,但是已经使用过的字母不允许再用。
阅读全文
摘要:Timus 1318. Logarithm 要求将一些 128-bit 数进行 XOR 运算后,取对数(只计算到整数部分),然后求它们的和。
阅读全文
摘要:本文介绍了四种可用于 C# 的 BigInteger 类:.NET Framework 3.5 Base Class Library 中的 System.Numeric.BigInteger、Skyiv.Numeric.BigInteger、ChewKeongTAN.BigInteger 和 java.math.BigInteger。并对她们进行比较。
阅读全文
摘要:偶然在 MSDN 上看到 Math.BigMul 方法。我就想,为什么 .NET Base Class Library 要提供这么一个方法?她的功能不就是等价于 (long)a * b 吗?
阅读全文
摘要:Timus 1402. Cocktails 要求计算出鸡尾酒共有多少种调法。这道题目是说,给定 N (1 ≤ N ≤ 21) 种不同的原料,要求计算出总共能够调制出多少种不同的鸡尾酒。每种原料最多只能使用一次,但是投放原料的次序不同调制出来的鸡尾酒也不同。
阅读全文
摘要:
Timus 1531. Zones on a plane 要求计算满足给定条件的简单多边形的个数。这道题目是说,在平原上有若干三角形组成的区域 Zi。Z1 包含两个等腰直角三角形,组成一个正方形。Zn+1 由 Zn 按以下方法生成:以 Zn 中的三角形的直角边作为新的等腰直角三角形的斜边,然后再移去 Zn 中的三角形,剩下的三角形就组成了 Zn+1。现在要求计算 Zn 中包含多少个简单多边形。
阅读全文

摘要:Timus 1013. K-based numbers. Version 3 要求计算出不包括相邻的零的 N 位 K-进制数共有多少个。
阅读全文
摘要:比较 C# 和 C/C++ 应用程序的性能
阅读全文
摘要:Timus 1219. Symbolic Sequence 要求输出满足给定条件的一百万个小写拉丁字母。
阅读全文