??xml version="1.0" encoding="utf-8" standalone="yes"?>久久一二三四,欧美怡红院视频,欧美成人亚洲成人日韩成人http://www.shnenglu.com/chengmeng/zh-cnSat, 23 Aug 2025 22:07:01 GMTSat, 23 Aug 2025 22:07:01 GMT60g++的一个bug?http://www.shnenglu.com/chengmeng/archive/2006/10/12/13604.htmlchengerchengerThu, 12 Oct 2006 08:28:00 GMThttp://www.shnenglu.com/chengmeng/archive/2006/10/12/13604.htmlhttp://www.shnenglu.com/chengmeng/comments/13604.htmlhttp://www.shnenglu.com/chengmeng/archive/2006/10/12/13604.html#Feedback4http://www.shnenglu.com/chengmeng/comments/commentRss/13604.htmlhttp://www.shnenglu.com/chengmeng/services/trackbacks/13604.html
class A
{
public:
    template
<typename T>
    T f(T val);

    template <>
    int
f<int>(int val);
};

我用的是g++ 3.4.2 mingw版本。编译上面这D代码时Q错误信息如下:

5: error: invalid explicit specialization before '>' token
5: error: explicit specialization in non-namespace scope `class A'

如果把f的定义放到全局作用域中Q就不会出错。而上面这D代码在VC++ 8.0下可以编译通过。运行v来也没有问题。别的编译器我没有试q?br />
UpdateQ多谢周星星的指点,比较“常规”的写法如下:

class A
{
public:
    template <typename T>
    T f(T val);
};


template
<typename T>
T A::f(T val)
{
    // ...
}

template <>
int
A::f<int>(int val)
{
    //...
}


q种写法没有Q何问?在g++ 3.4.2和VC++ 8.0下均表现正常Q。至于ؓ什么前面的写法Dg++下报错,q不是很清楚?img src ="http://www.shnenglu.com/chengmeng/aggbug/13604.html" width = "1" height = "1" />

chenger 2006-10-12 16:28 发表评论
]]>
Exploring Ruby I:Name Conventionshttp://www.shnenglu.com/chengmeng/archive/2006/09/29/13156.htmlchengerchengerFri, 29 Sep 2006 10:56:00 GMThttp://www.shnenglu.com/chengmeng/archive/2006/09/29/13156.htmlhttp://www.shnenglu.com/chengmeng/comments/13156.htmlhttp://www.shnenglu.com/chengmeng/archive/2006/09/29/13156.html#Feedback0http://www.shnenglu.com/chengmeng/comments/commentRss/13156.htmlhttp://www.shnenglu.com/chengmeng/services/trackbacks/13156.html Ruby中的名字U定

历史Q高U程序语a的老祖宗,FortranQ对源程序中的名字,或者叫标识W?identifier)有很严格的规定,譬如首字母代表变量的cd{等。个是当q编译技术还未成熟时的权宜之计。后来主的E序设计语言都放松了对名字的限制Q像C/C++/JavaQ只有一点点小的约束(Ҏ用字W的限制Q只能用英文字母、数字、下划线Q必M下划U或英文字母开头。这也容易理解,完全是ؓ了写词法分析器的方便Q。而和Fortran同时代的LispQ这斚w更是大开l灯Q爱怎么定义怎么定义。然而到了现在,g有点复古的潮,有些语言开始对名字讄一些规则,比如Haskell,Erlang,包括Ruby?br />
a归正传。Ruby中的名字规则主要是根据名字的W一个字母来军_q个名字的用方式。具体来_
  • 局部变量,Ҏ名,Ҏ参数Q以写字母或下划线开_?_'q接?br />ExampleQi,note_controller
  • 帔RQ全部大写,?_'q接
    ExampleQA_NUM
  • c,模块(module)Q都是开头大写(因ؓcd是全局变量Q,其他写q且直接q接在一?br />ExampleQActiveRecord
  • 全局变量Q以'$'开_肯定是跟Perl学的Q我觉得不怎么好)
  • 实例变量(instance variable)Q以'@'开_同上Q?/li>
  • cd?class variable)Q以'@@'开_诡异Q?/li>
有点Perl的味道,但Perl更加变态,居然要以首字母区分标量、数l和Hash表,q就不太人道了。相比v来,Ruby的设|还是可以接受的Q它只不q是把有些约定俗成的规则直接变成了语a规则。每个程序员基本上都会有自己的一套命名规则,比如写C++E序Ӟcd通常用大写字母开_宏名则通常由大写字母组成,而下划线开头的Q特别是双下划线Q往往留给库开发者等{。Ruby的想法可能是Q干脆统一了这些命名规则,免得ZU风?Style)问题争论不休。也是挺有道理的?img src ="http://www.shnenglu.com/chengmeng/aggbug/13156.html" width = "1" height = "1" />

chenger 2006-09-29 18:56 发表评论
]]>
玩了玩Rubyhttp://www.shnenglu.com/chengmeng/archive/2006/09/24/12878.htmlchengerchengerSun, 24 Sep 2006 06:50:00 GMThttp://www.shnenglu.com/chengmeng/archive/2006/09/24/12878.htmlhttp://www.shnenglu.com/chengmeng/comments/12878.htmlhttp://www.shnenglu.com/chengmeng/archive/2006/09/24/12878.html#Feedback0http://www.shnenglu.com/chengmeng/comments/commentRss/12878.htmlhttp://www.shnenglu.com/chengmeng/services/trackbacks/12878.html
Ruby的源代码q充分体C拿来M的精,能重用的决不自己写:比如Hash表就用了一个通用的Hash表实玎ͼ正则表达式则使用了GNU的regex库,random是有名的MT19937Q也是日本h写的Q。尝试了一下编译,在mingw上执行标准三部曲Q?/configure,make,make installQ一切OK?br />


chenger 2006-09-24 14:50 发表评论
]]>
Google面试题之补充http://www.shnenglu.com/chengmeng/archive/2006/09/16/12548.htmlchengerchengerSat, 16 Sep 2006 07:35:00 GMThttp://www.shnenglu.com/chengmeng/archive/2006/09/16/12548.htmlhttp://www.shnenglu.com/chengmeng/comments/12548.htmlhttp://www.shnenglu.com/chengmeng/archive/2006/09/16/12548.html#Feedback4http://www.shnenglu.com/chengmeng/comments/commentRss/12548.htmlhttp://www.shnenglu.com/chengmeng/services/trackbacks/12548.html文章。我l的法跑得很慢Q后面张沈鹏同学用python写了一?a href="/zuroc/archive/2006/09/16/12540.html">法Q速度很快Q再ơ感觉python的性能不像惌中那么坏Q当然和法有关Q,看了一下他的代码,函数count(i)用来计算于i?的个敎ͼ和我写的calc_ones法基本相同Q只不过count(i)用了递归Q看上去更清楚一些。主要的速度差别在little(i)函数上,q个函数避免了很多P代:

size_t little(size_t i)
{

   
size_t ones = calc_ones(i);
    if(ones == i)
        cout << i <<
"\n";
    if(i < ones)
        if
((ones - i)/9 > 1)
            return
i - (ones - i)/8;
    if
(i > ones)
        return
ones;
    return
i - 1;
}


q是C++版本。主循环也要略微改变一下:

void
solve()
{

    size_t
max = 10000000000;
    for
(size_t i = max;i > 0;i = little(i));
}


可以看到Q现在@环从大到。little函数扑ֈ下一个可能满题目约束的i。在little函数中,首先计算于i?的个数onesQ如果ones和i相等Q就i输出Q这是题目要求q的事)。如果i于onesQ那么就要在于i的自然数中找下一个可能满x件的数。因为搜索的范围不超q?0^10Q所以一个数中至多含??Q按照这U极端情况,也必di减少(ones-i)/8才有可能满条g(q里之所以是8Q因为同时i也减了Q。如果i大于onesQ考虑一个小于i的数i'Q可以考虑一下calc_ones(i')的取|极端情况Q[i',i)的范围内的整数没有一个包?Q也是说当i减少到i'?的个数没有损失,那么calc_ones(i') = calc_ones(i)Q如果i'>calc_ones(i)Q则有i'>calc_ones(i')Q直到i'=calc_ones(i)Q因此下一个需要查看的数就是calc_ones(i)。其实上面这一D讨论可以用一个式子来概括Q对i'<i,calc_ones(i)-9*(i-i') <= calc_ones(i') <= calc_ones(i)。这样就能大大提高速度了?br />

chenger 2006-09-16 15:35 发表评论
]]>
回溯法求解素数填表问?/title><link>http://www.shnenglu.com/chengmeng/archive/2006/09/13/12425.html</link><dc:creator>chenger</dc:creator><author>chenger</author><pubDate>Wed, 13 Sep 2006 15:13:00 GMT</pubDate><guid>http://www.shnenglu.com/chengmeng/archive/2006/09/13/12425.html</guid><wfw:comment>http://www.shnenglu.com/chengmeng/comments/12425.html</wfw:comment><comments>http://www.shnenglu.com/chengmeng/archive/2006/09/13/12425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/chengmeng/comments/commentRss/12425.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/chengmeng/services/trackbacks/12425.html</trackback:ping><description><![CDATA[     摘要: 问题是这LQ?*3的方|填入1-10Q比10更大也可以)Q要求相MC和ؓ素数?q个题目除了回溯g没有别的Ҏ了?nbsp; <a href='http://www.shnenglu.com/chengmeng/archive/2006/09/13/12425.html'>阅读全文</a><img src ="http://www.shnenglu.com/chengmeng/aggbug/12425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/chengmeng/" target="_blank">chenger</a> 2006-09-13 23:13 <a href="http://www.shnenglu.com/chengmeng/archive/2006/09/13/12425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个语al节问题http://www.shnenglu.com/chengmeng/archive/2006/09/11/12297.htmlchengerchengerMon, 11 Sep 2006 11:01:00 GMThttp://www.shnenglu.com/chengmeng/archive/2006/09/11/12297.htmlhttp://www.shnenglu.com/chengmeng/comments/12297.htmlhttp://www.shnenglu.com/chengmeng/archive/2006/09/11/12297.html#Feedback3http://www.shnenglu.com/chengmeng/comments/commentRss/12297.htmlhttp://www.shnenglu.com/chengmeng/services/trackbacks/12297.html阅读全文

chenger 2006-09-11 19:01 发表评论
]]>
据说是Google面试?/title><link>http://www.shnenglu.com/chengmeng/archive/2006/09/08/12161.html</link><dc:creator>chenger</dc:creator><author>chenger</author><pubDate>Fri, 08 Sep 2006 05:05:00 GMT</pubDate><guid>http://www.shnenglu.com/chengmeng/archive/2006/09/08/12161.html</guid><wfw:comment>http://www.shnenglu.com/chengmeng/comments/12161.html</wfw:comment><comments>http://www.shnenglu.com/chengmeng/archive/2006/09/08/12161.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.shnenglu.com/chengmeng/comments/commentRss/12161.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/chengmeng/services/trackbacks/12161.html</trackback:ping><description><![CDATA[从同学那儿听说了一个传说是Google面试题的题目Q找出所有的正整数NQ得小于N的所有正整数的各位数字中所有的'1'的数目和N相等?br /><br />我的解法Q?br /><br /><font color="#a020f0" face="Courier New">#include </font><font color="#ff00ff" face="Courier New"><iostream></font><font face="Courier New"></font><font color="#a020f0" face="Courier New"><br />#include </font><font color="#ff00ff" face="Courier New"><limits></font><font face="Courier New"></font><font color="#a020f0" face="Courier New"><br />#include </font><font color="#ff00ff" face="Courier New"><cstddef></font><font face="Courier New"></font><font color="#804040" face="Courier New"><b><br /><br />using</b></font><font color="#2e8b57" face="Courier New"><b> namespace</b></font><font face="Courier New"> std; <br /><br /></font><font color="#2e8b57" face="Courier New"><b>size_t</b></font><font face="Courier New"> calc_ones(</font><font color="#2e8b57" face="Courier New"><b>size_t</b></font><font face="Courier New"> n) <br />{ </font><font color="#2e8b57" face="Courier New"><b><br />    const </b></font><font color="#2e8b57" face="Courier New"><b>size_t</b></font><font face="Courier New"> save = n; <br /></font><font color="#2e8b57" face="Courier New"><b>    size_t</b></font><font face="Courier New"> sum = </font><font color="#ff00ff" face="Courier New">0</font><font face="Courier New">,ten = </font><font color="#ff00ff" face="Courier New">1</font><font face="Courier New">,cnt = </font><font color="#ff00ff" face="Courier New">1</font><font face="Courier New">; <br /></font><font color="#804040" face="Courier New"><b>    if</b></font><font face="Courier New">(n%</font><font color="#ff00ff" face="Courier New">10</font><font face="Courier New"> > </font><font color="#ff00ff" face="Courier New">1</font><font face="Courier New">) <br />        sum = </font><font color="#ff00ff" face="Courier New">1</font><font face="Courier New">; <br />    n /= </font><font color="#ff00ff" face="Courier New">10</font><font face="Courier New">; </font><font color="#804040" face="Courier New"><b><br />    for</b></font><font face="Courier New">(;n;n /= </font><font color="#ff00ff" face="Courier New">10</font><font face="Courier New">) <br />    { </font><font color="#2e8b57" face="Courier New"><b><br />        size_t</b></font><font face="Courier New"> r = n%</font><font color="#ff00ff" face="Courier New">10</font><font face="Courier New">; </font><font color="#804040" face="Courier New"><b><br />        if</b></font><font face="Courier New">(r == </font><font color="#ff00ff" face="Courier New">1</font><font face="Courier New">) <br />            sum += save + (r*cnt - </font><font color="#ff00ff" face="Courier New">10</font><font face="Courier New">*n)*ten; <br /></font><font color="#804040" face="Courier New"><b>        else</b></font><font color="#804040" face="Courier New"><b> if</b></font><font face="Courier New">(r != </font><font color="#ff00ff" face="Courier New">0</font><font face="Courier New">) <br />            sum += (</font><font color="#ff00ff" face="Courier New">10</font><font face="Courier New"> + r*cnt)*ten; <br />        ten *= </font><font color="#ff00ff" face="Courier New">10</font><font face="Courier New">; <br />        ++cnt; <br />    } <br /></font><font color="#804040" face="Courier New"><b>    return</b></font><font face="Courier New"> sum; <br />} <br /><br /></font><font color="#2e8b57" face="Courier New"><b>void</b></font><font face="Courier New"> solve() <br />{ </font><font color="#2e8b57" face="Courier New"><b><br />    size_t</b></font><font face="Courier New"> max = numeric_limits<</font><font color="#2e8b57" face="Courier New"><b>size_t</b></font><font face="Courier New">>::max(); </font><font color="#804040" face="Courier New"><b><br />    for</b></font><font face="Courier New">(</font><font color="#2e8b57" face="Courier New"><b>size_t</b></font><font face="Courier New"> i = </font><font color="#ff00ff" face="Courier New">1</font><font face="Courier New">;i < max;++i) </font><font color="#804040" face="Courier New"><b><br />        if</b></font><font face="Courier New">(calc_ones(i) == i) <br />            cout << i << </font><font color="#ff00ff" face="Courier New">"</font><font color="#6a5acd" face="Courier New">\n</font><font color="#ff00ff" face="Courier New">"</font><font face="Courier New">; <br />} </font><font color="#2e8b57" face="Courier New"><b><br /><br />int</b></font><font face="Courier New"> main() <br />{ <br />    solve(); </font><font color="#804040" face="Courier New"><b><br />    return</b></font><font color="#ff00ff" face="Courier New"> 0</font><font face="Courier New">; <br />}</font><br /><br />在VS2005下编译运行,输出l果为:<br /><br />199992 199993 199994 199995 199996 199997 199998 199999 200000 1599992 1599993 1599994 1599995 1599996 1599997 1599998 1599999 1600000 1600001 2600000 13200000 13200001 35000000 35199992 35199993 35199994 35199995 35199996 35199997 35199998 35199999 35200000 117463827 500000000 500199992 500199993 500199994 500199995 500199996 500199997 500199998 500199999 500200000 501599992 501599993 501599994 501599995 501599996 501599997 501599998 501599999 501600000 501600001 502600000 513200000 513200001 535000000 535199992 535199993 535199994 535199995 535199996 535199997 535199998 535199999 535200000<br /><br />可以证明Q再往上就没有了。跑得比较慢Q需要好几分钟。我考虑q进一步羃检索的范围Q应该是可以做到的,不过没有实现?br /><br />UpdateQ上面的法有很大的改进余地Q主要来自张沈鹏同学l出的程序,我专门写了一文章来讨论Q?a href="/chengmeng/archive/2006/09/16/12548.html">q里</a>。或者可以直接看<a href="/zuroc/archive/2006/09/16/12540.html">张沈鹏同学的文章</a>?br /><img src ="http://www.shnenglu.com/chengmeng/aggbug/12161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/chengmeng/" target="_blank">chenger</a> 2006-09-08 13:05 <a href="http://www.shnenglu.com/chengmeng/archive/2006/09/08/12161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Return of Turboshttp://www.shnenglu.com/chengmeng/archive/2006/09/06/12070.htmlchengerchengerTue, 05 Sep 2006 23:32:00 GMThttp://www.shnenglu.com/chengmeng/archive/2006/09/06/12070.htmlhttp://www.shnenglu.com/chengmeng/comments/12070.htmlhttp://www.shnenglu.com/chengmeng/archive/2006/09/06/12070.html#Feedback7http://www.shnenglu.com/chengmeng/comments/commentRss/12070.htmlhttp://www.shnenglu.com/chengmeng/services/trackbacks/12070.html
Turbo下蝲

UpdateQ说一下下载文件的情况。有两个部分Q一个是prerequisitesQ另一个是main installation。奇怪的是prerequisites当中q包?NET Framework 1.1Q是不是太old了一点?q部分prerequisites和Borland Develop Studio基本上是一L?br />
l箋UpdateQ很不幸Q未能成功。安装了一遍之后,启动时接q保错,g是在drtl100.bpl和coreide100.bpl的时候出了段错误Q结果IDE是启动了Q和C++有关的项目还有组件一个都没有……虽然还剩了诸如~译器和~辑器调试器{内容,但意义不大。考虑到机子上原来q装了个C++ Builder 6Q卸之,再重装一遍Turbo C++Q还是老样子……彻底放弃?br />

chenger 2006-09-06 07:32 发表评论
]]>
临时对象的生存期http://www.shnenglu.com/chengmeng/archive/2006/09/04/12024.htmlchengerchengerMon, 04 Sep 2006 15:23:00 GMThttp://www.shnenglu.com/chengmeng/archive/2006/09/04/12024.htmlhttp://www.shnenglu.com/chengmeng/comments/12024.htmlhttp://www.shnenglu.com/chengmeng/archive/2006/09/04/12024.html#Feedback13http://www.shnenglu.com/chengmeng/comments/commentRss/12024.htmlhttp://www.shnenglu.com/chengmeng/services/trackbacks/12024.html发现了VS 2005的一个重量Bug!

q是直接l出代码Q?br />
#include <iostream>
#include
<string>

using
namespace std;

int
main()
{

    const
char *p = string("hello").c_str();
    cout << p << endl;

    return
0;
}


x输出l果是什么?

q时VS2005和g++的结果就不一样了。VS2005上什么都不输出,而g++ 3.4上则输出了似乎非常合理的l果QhelloQ符合很多h的预期。不q查了标准以后,q是把票投给VS2005?br />
首先Q?font face="Courier New">string("hello")产生了一个temporary objectQ或者说临时对象。C++标准对时对象的生存?life time)有明的规定Q可见标?2.2节第3-5条。第3条讨Z临时对象的析构时_

3. ... Temporary objects are destroyed as the last step in evaluating the full-expression (1.9) that (lexically) contains the point where they were created. This is true even if that evaluation ends in throwing an exception.

q又涉及到full-expression的定义了Q参?.9节。整个对p的初始化构成了一个full-expression。在下结Z前,q要先看看第4?条,分别讨论了两个例外情形,一个是时对象作为初始化子,例如string s = string("hello")Q第二是一个引用变量绑定到q个临时对象上,例如const string &s = string("hello")Q总而言之,在这两种情Ş中可以通过一个名字来存取q个对象Q此对象的生存期g长到变量名的作用域结束。除此之外,都按照第3条处理?br />
有了q些准备Q拿前面l的例子往里套明白了Q这里没有出??所指出的例外,因此W?条的原则适用。而不full-expression如何Q可以确定的是在p被初始化之后临时对象string("hello")的析构函数就应该被调用。在VS2005中进行调试,可以发现string析构函数调用的时间就在p被初始化之后Q语?font face="Courier New">cout << p << endl执行之前。手头没有方便的工具来调试g++~译出来的程?不太会用gdb调试C++E序Q特别涉及到STL)。至于之后p指向的内存到底如何,则和具体的string实现相关了。这样分析下来,VS2005的结果还是比较不错的Q而g++的结果则Ҏ让h产生误解?br />
UpdateQ察看g++~译出来的汇~代码,发现g++同样在表辑ּ求值后析构了时对象,只不q由于实C的原因,p指向的内容还没有清空?img src ="http://www.shnenglu.com/chengmeng/aggbug/12024.html" width = "1" height = "1" />

chenger 2006-09-04 23:23 发表评论
]]>
{法的性能试http://www.shnenglu.com/chengmeng/archive/2006/09/02/11972.htmlchengerchengerSat, 02 Sep 2006 13:16:00 GMThttp://www.shnenglu.com/chengmeng/archive/2006/09/02/11972.htmlhttp://www.shnenglu.com/chengmeng/comments/11972.htmlhttp://www.shnenglu.com/chengmeng/archive/2006/09/02/11972.html#Feedback0http://www.shnenglu.com/chengmeng/comments/commentRss/11972.htmlhttp://www.shnenglu.com/chengmeng/services/trackbacks/11972.htmlq篇blogH然惛_的。这个筛法求素数的程序想必每个学~程的h都写q,几乎是最l典的算法之一了,虽然g没什么用。但好像的确没见q对q个古老算法的严格分析。一时好奇,想把这个算法纳入大O的框架之中……不怎么P先拿Z码再?

require'benchmark'
 
def
sievePerformance(n)
    r =
Benchmark.realtime() do
        sieve =
Array.new(n,true)
        sieve[
0..1] = [false,false]
        2.upto(n) do |i|
            if sieve[i]
                (
2*i).step(n,i) do |j|
                    sieve[j] =
false
               
end
           
end
       
end
    end

   
r
end


q段代码抄自前面Robert C.Martin先生的blogQ对{法作性能试。初看v来,E序的主体是二重循环Q因此算法的复杂性好像是O(N2)之类的玩意?要么是O(NlnN)Q?br /> 
下图是Ruby自带的benchmark模块量的结果,上限N?0000?00000Q步?0000。Rober C.Martin的文章里也有一张图Q是?000000?000000Q从图中可以看到Q他电脑的性能q胜于我Q我要是?000000?000000q么跑一遍,花儿都谢了……MQ实的l果是:q个法的性能基本上是U性的。出于对rubyq样的解释型语言的某U不信QQ我又把q段E序用C++重写了一遍,拿C标准库提供的clock函数量旉Q结果在N于10000000的时候,基本上呈U性,但再往后花费的旉开始超q线性增长了?br />
下面我给一个比较粗略的分析Q解释ؓ什么这个算法的复杂度表CؓU性。首先,我认Z要花Ҏ间的是对sieve数组的读写,循环变量的增加应该可以忽略。如果p<N是素敎ͼ那么pq入内@环将i的倍数“挖掉”,也就是对sieve的相应元素赋|要进行[N/p]-1ơ。这样就得到d的赋值次数S为:



其中p为素数。显?br />


数论中有个Mertens定理可以估计上面括号中的和式Q结果ؓ



其中c是一个常数。可以看刎ͼ在N很大时和式的主要部分为NlnlnN。而lnlnN是一个增长极慢的函数Qlnln105=2.44Qlnln109=2.91Q几乎就可以当常数处理(臛_?2位无W号整数范围内)。其他的一些项Q比如@环变量的步进Q都是O(N)Q这也就不难理解整个E序的性能是几乎是O(N)了?br />



UpdateQ上面的代码有个很明昄问题Q就是内循环应该从i*i开始,而不?*iQ这样对于比较大的NQ性能提高很明显(接近一半)。另外一个可改进的地Ҏ外层循环的upto(n)Q可以改为upto(Integer(Math.sqrt(n))Q其实这两个改动效果是重叠的QQ意改一个就差不多了。赋值次数S应ؓQ?br />


l果为:



可以看到效率的提升是很明昄Q毕竟lnln232也才不到3.1Qln2Uؓ0.7?br />

chenger 2006-09-02 21:16 发表评论
]]>
þݺҹҹ2014| ˾þAV| þþƷAAƬһ| һaƬþëƬ16| Ʒþþþþù| þþþAVרվ| þþþþþŮú| Ʒþþþþô| þҹɫƷ| þݺҹҹ2O2O| ƷۺϾþõһҳ| Ʒþþþþר | þպƬ| þۺŷ| ݺɫۺվþþþþþø| þþƷ޾Ʒ| Ʒþþþav | þۺϾþþ| þþƷAV㽶| Ʒþþþþþþþþþþþþ| þۺϾɫۺվ| ޹ƷۺϾþ| ɫۺϾþþþۺ99| þþƷɭ| Ʒþһ| þþž޾Ʒ| þһҹ| һþaþþƷۺ㽶| þùƷ԰| ޺ݺݾþۺһ77777| žžþȻ㽶ͼƬ| ɫվþþþۺywww| þþƷAVþþ| ޾ƷۺϾþ| һһþaþþƷۺ鶹| þþwww˳| þþƷѿ| ɫۺϾþ| þ99Ʒžžžþ| þ99һ| պŷۺϾþӰԺDs|