楼主: 〇〇

Project Euler Problem 276, 268, 347

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
21#
 楼主| 发表于 2012-1-8 11:59 | 只看该作者
newkid 发表于 2012-1-8 11:54
#347, 相当于一个斜面 z=x*lg1+y*lg2, 找出正整数坐标(x,y)在这个面上的投影,其中最靠近天花板 z=log(n)的 ...

都没看懂,汗ing

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
22#
 楼主| 发表于 2012-1-8 13:59 | 只看该作者
本帖最后由 〇〇 于 2012-1-8 14:00 编辑

Problem 366
07 January 2012


Two players, Anton and Bernhard, are playing the following game.
There is one pile of n stones.
The first player may remove any positive number of stones, but not the whole pile.
Thereafter, each player may remove at most twice the number of stones his opponent took on the previous move.
The player who removes the last stone wins.

E.g. n=5
If the first player takes anything more than one stone the next player will be able to take all remaining stones.
If the first player takes one stone, leaving four, his opponent will take also one stone, leaving three stones.
The first player cannot take all three because he may take at most 2x1=2 stones. So let's say he takes also one stone, leaving 2. The second player can take the two remaining stones and wins.
So 5 is a losing position for the first player.
For some winning positions there is more than one possible move for the first player.
E.g. when n=17 the first player can remove one or four stones.

Let M(n) be the maximum number of stones the first player can take from a winning position at his first turn and M(n)=0 for a losing position.

E M(n) for n<=100 is 728.

Find E M(n) for n<=10^18. Give your answer modulo 10^8.


使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
23#
发表于 2012-1-8 21:19 | 只看该作者
〇〇 发表于 2012-1-8 07:50
全都加上索引也没用,本来是个全表扫描操作
SQL> create index p2mp on p2(mp);

这个倒是,本来就是全扫
不过我觉得是你方法没用对,这个时候用pl/sql来处理更好,只要有能除尽的就第一时间可以判定了
268这个题的思路应该是用pl/sql这个工具去做,sql不能提前退出一些无用的循环,会浪费计算力

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
24#
发表于 2012-1-8 21:32 | 只看该作者
268我有个思路
1、10^16里,找出所有的素数
2、筛掉数字1、所有素数、所有单个素数的n次方,所有两个素数X、Y的power(X,n)*power(Y,m),所有三个素数的power(X,n)*power(Y,m)*power(Z,o)。m、n、o均为大于等于1的正整数,并且结果不超过10^16
3、计算筛掉的数字有多少,相减即可得到满足条件的素数


若按〇〇的思路,四个素数相乘,再找倍数,则难以消除重复的数
newkid提及的对数法,能一定程度上简化计算量,但在达到临界点时,难以判断是否超出10^16,还需要再次做乘法去验算

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
25#
 楼主| 发表于 2012-1-8 21:40 | 只看该作者
1、10^16里,找出所有的素数
不现实 http://tieba.baidu.com/f?kz=817417199

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
26#
发表于 2012-1-9 02:20 | 只看该作者

#347 用PLSQL效果还可以:
DECLARE
   TYPE t_num IS TABLE OF NUMBER;

   V_RESULT t_num:=t_num();
   I NUMBER DEFAULT 1;
   J NUMBER DEFAULT 0;
   lv_sum NUMBER :=0;
   
   lv_limit NUMBER := 1E7;
   
   lv_upper1 NUMBER := (SQRT(lv_limit/2)-1)/2;
   lv_upper2 NUMBER := CEIL(lv_limit/2/2-1);
   lv_step BINARY_INTEGER;
   
   TYPE t_prime IS RECORD (
        pn NUMBER,lg NUMBER
        );
   TYPE t_primes IS TABLE OF t_prime;
   lv_primes t_primes := t_primes();

   lv_lg number := LOG(10,lv_limit);
   
BEGIN
    v_result.EXTEND(lv_upper2);

    while i<lv_upper1 loop
          lv_step := i*2+1;
          j:=2*i*(i+1);
          while j<=lv_upper2 loop
                v_result.DELETE(j);
                j:=j+lv_step;
          end loop;
          i := v_result.NEXT(i);
    end loop;

   
    lv_primes.EXTEND;
    lv_primes(1).pn:=2;
    lv_primes(1).lg:=LOG(10,2);

    for j in 1 .. lv_upper2 loop
        if v_result.EXISTS(j) then
           lv_primes.EXTEND;
           lv_primes(lv_primes.COUNT).pn:=j*2+1;
           lv_primes(lv_primes.COUNT).lg:=LOG(10,j*2+1);
        end if;
    end loop;

    FOR i IN 1..lv_primes.COUNT LOOP
        EXIT WHEN lv_primes(i).lg + lv_primes(i+1).lg >lv_lg ;
        FOR j IN i+1..lv_primes.COUNT LOOP
            EXIT WHEN lv_primes(i).lg + lv_primes(j).lg >lv_lg ;
        
            SELECT lv_sum+MAX(POWER(lv_primes(i).pn,FLOOR(ROUND((lv_lg-LEVEL*lv_primes(j).lg)/lv_primes(i).lg,30)))*POWER(lv_primes(j).pn,LEVEL))
              INTO lv_sum
            FROM DUAL
            CONNECT BY LEVEL<=FLOOR((lv_lg-lv_primes(i).lg)/lv_primes(j).lg);
        
        END LOOP;
    END LOOP;

    DBMS_OUTPUT.PUT_LINE('sum='||lv_sum);
END;
/

sum=11109800204052

PL/SQL procedure successfully completed.

Elapsed: 00:01:28.33

上一帖我是试图将其图形化,结果变成故弄玄虚。其实就是求 x*lg1+y*lg2 <= log(N) 在(X,Y)为正整数时的最大值。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
27#
 楼主| 发表于 2012-1-9 02:49 | 只看该作者
newkid 发表于 2012-1-9 02:20
#347 用PLSQL效果还可以:
DECLARE
   TYPE t_num IS TABLE OF NUMBER;

nice,不在嵌套循环中访问表的说法看来也不绝对。。。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
28#
 楼主| 发表于 2012-1-9 16:58 | 只看该作者
〇〇 发表于 2012-1-8 21:40
1、10^16里,找出所有的素数
不现实 http://tieba.baidu.com/f?kz=817417199

素数定理描述素数的大致分布情况。
素数的出现规律一直困惑着数学家。一个个地看,素数在正整数中的出现没有什么规律。可是总体地看,素数的个数竟然有规可循。对正实数x,定义π(x)为不大于x的素数个数。数学家找到了一些函数来估计π(x)的增长。以下是第一个这样的估计。
其中ln xx自然对数。上式的意思是当x趋近∞,π(x)与x/ln x的比值趋近1。但这不表示它们的数值随着x增大而接近。
下面是对π(x)更好的估计:
,当x 趋近∞。 其中(对数积分),而关系式右边第二项是误差估计,详见大O符号
下表比较了π(x),x/ln x和Li(x):
xπ(x)[1]π(x) − x / ln x[2]π(x) / (x / ln x)li(x) − π(x)[3]x / π(x)
104−0.30.9212.22.500
102253.31.1515.14.000
103168231.161105.952
1041,2291431.132178.137
1059,5929061.1043810.425
10678,4986,1161.08413012.740
107664,57944,1581.07133915.047
1085,761,455332,7741.06175417.357
10950,847,5342,592,5921.0541,70119.667
1010455,052,51120,758,0291.0483,10421.975
10114,118,054,813169,923,1591.04311,58824.283
101237,607,912,0181,416,705,1931.03938,26326.590
1013346,065,536,83911,992,858,4521.034108,97128.896
10143,204,941,750,802102,838,308,6361.033314,89031.202
101529,844,570,422,669891,604,962,4521.0311,052,61933.507
1016279,238,341,033,9257,804,289,844,3931.0293,214,63235.812
10172,623,557,157,654,23368,883,734,693,2811.0277,956,58938.116
101824,739,954,287,740,860612,483,070,893,5361.02521,949,55540.420
1019234,057,667,276,344,6075,481,624,169,369,9601.02499,877,77542.725
10202,220,819,602,560,918,84049,347,193,044,659,7011.023222,744,64445.028
102121,127,269,486,018,731,928446,579,871,578,168,7071.022597,394,25447.332
1022201,467,286,689,315,906,2904,060,704,006,019,620,9941.0211,932,355,20849.636
10231,925,320,391,606,803,968,92337,083,513,766,578,631,3091.0207,250,186,21651.939

素数定理可以给出第n个素数pn)的渐近估计:
它也给出从整数中抽到素数的概率。从不大于n的自然数随机选一个,它是素数的概率大约是1/ln n
这定理的式子于1798年法国数学家勒让德提出。1896年法国数学家雅克·阿达马和比利时数学家Charles Jean de la Vallée-Poussin先后独立给出证明。证明用到了复分析,尤其是黎曼ζ函数
因为黎曼ζ函数与π(x)关系密切,关于黎曼ζ函数的黎曼猜想数论很重要。一旦猜想获证,便能大大改进素数定理误差的估计。1901年瑞典数学家Helge von Koch证明出,假设黎曼猜想成立,以上关系式误差项的估计可改进为
至于大O项的常数则还未知道。
[编辑] 初等证明素数定理有些初等证明只需用数论的方法。第一个初等证明于1949年由匈牙利数学家保罗·艾狄胥和挪威数学家阿特利·西尔伯格合作得出。
在此之前一些数学家不相信能找出不需借助艰深数学的初等证明。像英国数学家哈代便说过素数定理必须以复分析证明,显出定理结果的“深度”。他认为只用到实数不足以解决某些问题,必须引进复数来解决。这是凭感觉说出来的,觉得一些方法比别的更高等也更厉害,而素数定理的初等证明动摇了这论调。Selberg-艾狄胥的证明正好表示,看似初等的组合数学,威力也可以很大。 但是,有必要指出的是,虽然该初等证明只用到初等的办法,其难度甚至要比用到复分析的证明远为困难。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
29#
发表于 2012-1-9 20:42 | 只看该作者
〇〇 发表于 2012-1-9 16:58
素数定理描述素数的大致分布情况。
素数的出现规律一直困惑着数学家。一个个地看,素数在正整数中的出现 ...

你贴个来源链接吧,你转也没转全,图都哪儿去了?

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
30#
发表于 2012-1-10 00:16 | 只看该作者
〇〇 发表于 2012-1-9 02:49
nice,不在嵌套循环中访问表的说法看来也不绝对。。。

我也没访问表嘛?FROM DUAL CONNECT BY只是偷懒让SQL完成循环。
这道题和SQL可以说没有关系。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表