Stein算法的简单描述以及C++/Java的三种实现源代码

blue-creature-48x48欧几里德算法的简单描述以及C++与Java的各自实现代码中介绍的欧几里德算法是计算两个数最大公约数的传统算法,无论从理论还是从实际效率上都是很好的。但是却有一个致命的缺陷,这个缺陷在素数比较小的时候一般是感觉不到的,只有在大素数时才会显现出来。
一般实际应用中的整数很少会超过64位(当然现在已经允许128位了),对于这样的整数,计算两个数之间的模是很简单的。对于字长为32位的平台,计算两个不超过32位的整数的模,只需要一个指令周期,而计算64位以下的整数模,也不过几个周期而已。但是对于更大的素数,这样的计算过程就不得不由用户来设计,为了计算两个超过 64位的整数的模,用户也许不得不采用类似于多位数除法手算过程中的试商法,这个过程不但复杂,而且消耗了很多CPU时间。对于现代密码算法,要求计算 128位以上的素数的情况比比皆是,设计这样的程序迫切希望能够抛弃除法和取模。

Continue reading “Stein算法的简单描述以及C++/Java的三种实现源代码”

欧几里德算法的简单描述以及C++与Java的各自实现(源代码)

I-Love-Autumn-48x48 欧几里德算法描述:
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:
定理:gcd(a,b) = gcd(b,a mod b)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有d|a, d|b,而r = a – kb,因此d|r ,因此d是(b,a mod b)的公约数
假设d 是(b,a mod b)的公约数,则d | b , d |r ,但是a = kb +r ,因此d也是(a,b)的公约数
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证

Continue reading “欧几里德算法的简单描述以及C++与Java的各自实现(源代码)”

利用Minidx Extract-Text Com组件从doc,Xls,Pdf……等读取文本内容VC Demo

folder-find-48x48利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容》中具体的说明了Vb.Net中调用Minidx Extract-Text Com组件对Word,Excel,Pdf等各种文件进行文本抽取的用法。结果很多人都发邮件过来询问C++中如何调用(一些邮件会被Gmail判断为垃圾邮件……强烈建议有问题直接在本文后面留言或在这里提问,这样也可以减轻一点我的工作量,不必挨个回复)。抽空作了一个VC的Demo,工程用VS2005创建的,Unicode版本。下面对Demo稍微做一些说明,一些基本原理直接参照《利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容》就可以了,这里不再重复。

Continue reading “利用Minidx Extract-Text Com组件从doc,Xls,Pdf……等读取文本内容VC Demo”

利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容

不少人对Google,Baidu等搜索引擎可以“找到”你放在服务器上的Word的Doc,Excel的xls以及Pdf等各种文件而感到惊叹不已,也有不少人发来邮件询问我Minidx文件管理器中从各种格式的文件中读取文本内容是如何实现的。Linux平台实现起来比较复杂一些,不过对于Windows用户来说,其实利用微软Ifilter的Indexing service接口,可以比较容易的实现上面的功能。Minidx支持200多种文件格式,其实也是利用了Ifilter的接口。实现的基本原理,就是写一个Com组件,去查找系统中相应文件格式的API接口所在的Dll路径,然后调用抽取文本。

Continue reading “利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容”

关于删除一个指针一文后续引发的思考

cppblog的blog上写过一篇《在删除一个指针delete p之前是否需要检查p是否为NULL?》,结果引发了一些讨论,因为func的评论,有幸让fr3@K也参与了其中.讨论进行的也算比较热烈,对于讨论结果当时也以为找到了最终解.一切问题都已经解决了.再次访问fr3@K的codefreak博客,看了他的关于这一讨论的《重複 delete 指標》一文之后,却让我不由得开始重新思考这个问题,也开始质问自己面对问题时候的思考方式是否正确。 Continue reading “关于删除一个指针一文后续引发的思考”

C++ 程序文档生成器(doxygen)用法介绍

Doxygen是基于GPL的开源项目,是一个非常优秀的文档系统,当前支持在大多数unix(包括linux),windows家族,Mac系统上运行,完全支持C++, C, Java, IDL(Corba和Microsoft 家族)语言,部分支持PHP和C#语言,输出格式包括HTML、latex、RTF、ps、PDF、压缩的HTML和unix manpage,Doxygen软件可以从这里下载,软件本身用法非常简单。这里不做介绍,下面主要是代码中doxygen的注释的写法的介绍。 Continue reading “C++ 程序文档生成器(doxygen)用法介绍”

C++中删除一个指针delete p的工作原理

C++ 的debug跟踪的时候,delete操作时没办法跟进去的。看了一下delete的代码,发现delete p 操作做了两个处理:调用析构函数和释放内存。 Continue reading “C++中删除一个指针delete p的工作原理”