ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1691|回复: 116

Project Euler Problem 276, 268, 347 [复制链接]

精华贴数
12
技术积分
60555
社区积分
12362
注册时间
2008-1-16
论坛徽章:
257
版主8段
日期:2012-05-15 15:24:11紫蛋头
日期:2012-05-21 10:19:41
发表于 2012-1-6 19:51:01 |显示全部楼层
本帖最后由 newkid 于 2012-1-6 23:01 编辑

Problem 276[size=80%]29 January 2010

Consider the triangles with integer sides a, b and c with a b c.
An integer sided triangle (a,b,c) is called primitive if gcd(a,b,c)=1.
How many primitive integer sided triangles exist with a perimeter not exceeding 10 000 000?



我的新浪微博,欢迎大家加我:http://weibo.com/lu01


剑破冰山—Oracle开发艺术 已经上架销售
网购地址:互动|京东电子工业出版社书店卓越亚马逊当当华储
在线阅读:5lcto华储
源代码:博文视点ITPUB

版主

资深新手

精华贴数
18
技术积分
25684
社区积分
150
注册时间
2004-6-26
论坛徽章:
88
2010广州亚运会纪念徽章:篮球
日期:2011-01-07 22:47:45数据库板块每日发贴之星
日期:2011-04-19 01:01:01SQL大赛参与纪念
日期:2011-04-27 16:16:29数据库板块每日发贴之星
日期:2011-05-07 01:01:02现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-30 22:07:29迷宫蛋
日期:2011-06-13 19:24:11茶鸡蛋
日期:2011-06-17 19:21:39灰彻蛋
日期:2011-07-30 07:20:09ITPUB年度最佳版主
日期:2011-04-08 18:37:09数据库板块每日发贴之星
日期:2011-03-08 01:01:012011新春纪念徽章
日期:2011-03-05 21:30:25
发表于 2012-1-6 22:56:00 |显示全部楼层
我把另外两个搬过来并删掉原贴。这些东西就是玩玩,不是本版主旋律。

Problem 268 11 December 2009

It can be verified that there are 23 positive integers less than 1000 that are divisible by at least four distinct primes less than 100.
Find how many positive integers less than 10^16 are divisible by at least four distinct primes less than 100.

世界上只有两种编程方法:Oracle的方法和错误的方法。

剑破冰山—Oracle开发艺术 即将隆重推出
http://www.china-pub.com/197199
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10114321

使用道具 举报

版主

资深新手

精华贴数
18
技术积分
25684
社区积分
150
注册时间
2004-6-26
论坛徽章:
88
2010广州亚运会纪念徽章:篮球
日期:2011-01-07 22:47:45数据库板块每日发贴之星
日期:2011-04-19 01:01:01SQL大赛参与纪念
日期:2011-04-27 16:16:29数据库板块每日发贴之星
日期:2011-05-07 01:01:02现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-30 22:07:29迷宫蛋
日期:2011-06-13 19:24:11茶鸡蛋
日期:2011-06-17 19:21:39灰彻蛋
日期:2011-07-30 07:20:09ITPUB年度最佳版主
日期:2011-04-08 18:37:09数据库板块每日发贴之星
日期:2011-03-08 01:01:012011新春纪念徽章
日期:2011-03-05 21:30:25
发表于 2012-1-6 22:56:33 |显示全部楼层
Problem 347  03 September 2011

The largest integer  100 that is only divisible by both the primes 2 and 3 is 96, as 96=32*3=25*3. For two distinct primes p and q let M(p,q,N) be the largest positive integer N only divisible by both p and q and M(p,q,N)=0 if such a positive integer does not exist.
E.g. M(2,3,100)=96.
M(3,5,100)=75 and not 90 because 90 is divisible by 2 ,3 and 5.
Also M(2,73,100)=0 because there does not exist a positive integer  100 that is divisible by both 2 and 73.
Let S(N) be the sum of all distinct M(p,q,N). S(100)=2262.
Find S(10 000 000).

世界上只有两种编程方法:Oracle的方法和错误的方法。

剑破冰山—Oracle开发艺术 即将隆重推出
http://www.china-pub.com/197199
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10114321

使用道具 举报

版主

资深新手

精华贴数
18
技术积分
25684
社区积分
150
注册时间
2004-6-26
论坛徽章:
88
2010广州亚运会纪念徽章:篮球
日期:2011-01-07 22:47:45数据库板块每日发贴之星
日期:2011-04-19 01:01:01SQL大赛参与纪念
日期:2011-04-27 16:16:29数据库板块每日发贴之星
日期:2011-05-07 01:01:02现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-30 22:07:29迷宫蛋
日期:2011-06-13 19:24:11茶鸡蛋
日期:2011-06-17 19:21:39灰彻蛋
日期:2011-07-30 07:20:09ITPUB年度最佳版主
日期:2011-04-08 18:37:09数据库板块每日发贴之星
日期:2011-03-08 01:01:012011新春纪念徽章
日期:2011-03-05 21:30:25
发表于 2012-1-6 23:02:07 |显示全部楼层
后两个看起来比较容易,就是对数+组合。

世界上只有两种编程方法:Oracle的方法和错误的方法。

剑破冰山—Oracle开发艺术 即将隆重推出
http://www.china-pub.com/197199
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10114321

使用道具 举报

版主

资深新手

精华贴数
18
技术积分
25684
社区积分
150
注册时间
2004-6-26
论坛徽章:
88
2010广州亚运会纪念徽章:篮球
日期:2011-01-07 22:47:45数据库板块每日发贴之星
日期:2011-04-19 01:01:01SQL大赛参与纪念
日期:2011-04-27 16:16:29数据库板块每日发贴之星
日期:2011-05-07 01:01:02现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-30 22:07:29迷宫蛋
日期:2011-06-13 19:24:11茶鸡蛋
日期:2011-06-17 19:21:39灰彻蛋
日期:2011-07-30 07:20:09ITPUB年度最佳版主
日期:2011-04-08 18:37:09数据库板块每日发贴之星
日期:2011-03-08 01:01:012011新春纪念徽章
日期:2011-03-05 21:30:25
发表于 2012-1-7 06:14:47 |显示全部楼层
#347, 他说S(100)=2262, 我算出来只是2242, 哪里有错?

VAR N NUMBER;
EXEC :N := 100;

WITH
t as(SELECT 2*ROWNUM+1 rn FROM DUAL CONNECT BY ROWNUM <= CEIL(((:n)/2-1-1)/2)
    )
,p AS (
SELECT pn,LOG(10,pn) lg
FROM (
      SELECT rn pn from t
      MINUS
      SELECT t1.rn * t2.rn
        FROM t t1, t t2
      WHERE t1.rn <= t2.rn
            AND t1.rn <=SQRT(:n)
            AND t1.rn * t2.rn <:n/2
      UNION ALL SELECT 2 FROM DUAL
      )
)
,lg AS (
SELECT p1.pn pn1, p1.lg lg1, p2.pn pn2, p2.lg lg2
  FROM p p1,p p2
WHERE p1.pn<p2.pn AND p1.lg+p2.lg<=LOG(10,:n)
)
SELECT SUM(max_p)
  FROM (
SELECT lg.*
      ,(SELECT MAX(POWER(pn1,FLOOR((LOG(10,:N)-LEVEL*lg2)/lg1))*POWER(pn2,LEVEL))
         FROM DUAL
        CONNECT BY LEVEL<=FLOOR((LOG(10,:N)-lg1)/lg2)
        ) max_p
  FROM lg
)
/


SUM(MAX_P)
----------
      2242



WITH
t as(SELECT 2*ROWNUM+1 rn FROM DUAL CONNECT BY ROWNUM <= CEIL(((:n)/2-1-1)/2)
    )
,p AS (
SELECT pn,LOG(10,pn) lg
FROM (
      SELECT rn pn from t
      MINUS
      SELECT t1.rn * t2.rn
        FROM t t1, t t2
      WHERE t1.rn <= t2.rn
            AND t1.rn <=SQRT(:n)
            AND t1.rn * t2.rn <:n/2
      UNION ALL SELECT 2 FROM DUAL
      )
)
,lg AS (
SELECT p1.pn pn1, p1.lg lg1, p2.pn pn2, p2.lg lg2
  FROM p p1,p p2
WHERE p1.pn<p2.pn AND p1.lg+p2.lg<=LOG(10,:n)
)
SELECT (SELECT MAX(LPAD(POWER(pn1,FLOOR((LOG(10,:N)-LEVEL*lg2)/lg1))*POWER(pn2,LEVEL),3)||'='||pn1||'^'||FLOOR((LOG(10,:N)-LEVEL*lg2)/lg1)||' * '||pn2||'^'||LEVEL)
         FROM DUAL
        CONNECT BY LEVEL<=FLOOR((LOG(10,:N)-lg1)/lg2)
        ) max_p
  FROM lg
/

展开:
MAX_P
--------------------
96=2^5 * 3^1
80=2^4 * 5^1
98=2^1 * 7^2
88=2^3 * 11^1
52=2^2 * 13^1
68=2^2 * 17^1
76=2^2 * 19^1
92=2^2 * 23^1
58=2^1 * 29^1
62=2^1 * 31^1
74=2^1 * 37^1
82=2^1 * 41^1
86=2^1 * 43^1
94=2^1 * 47^1
75=3^1 * 5^2
63=3^2 * 7^1
99=3^2 * 11^1
39=3^1 * 13^1
51=3^1 * 17^1
57=3^1 * 19^1
69=3^1 * 23^1
87=3^1 * 29^1
93=3^1 * 31^1
35=5^1 * 7^1
55=5^1 * 11^1
65=5^1 * 13^1
85=5^1 * 17^1
95=5^1 * 19^1
77=7^1 * 11^1
91=7^1 * 13^1

30 rows selected.

用SQL造素数表比较慢,即使把前几个已知素数手工加入也不怎么样。
后面求最大值用的是穷尽法,这也比较笨,100万都得花四分多钟。哪位学过立体解析几何的给个公式。

世界上只有两种编程方法:Oracle的方法和错误的方法。

剑破冰山—Oracle开发艺术 即将隆重推出
http://www.china-pub.com/197199
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10114321

使用道具 举报

精华贴数
12
技术积分
60555
社区积分
12362
注册时间
2008-1-16
论坛徽章:
257
版主8段
日期:2012-05-15 15:24:11紫蛋头
日期:2012-05-21 10:19:41
发表于 2012-1-7 08:42:58 |显示全部楼层
newkid 发表于 2012-1-7 06:14
#347, 他说S(100)=2262, 我算出来只是2242, 哪里有错?

VAR N NUMBER;

展开:
MAX_P
--------------------
80=2^4 * 5^1

===>
100=2^2 * 5^2
我的新浪微博,欢迎大家加我:http://weibo.com/lu01


剑破冰山—Oracle开发艺术 已经上架销售
网购地址:互动|京东电子工业出版社书店卓越亚马逊当当华储
在线阅读:5lcto华储
源代码:博文视点ITPUB

使用道具 举报

版主

资深新手

精华贴数
18
技术积分
25684
社区积分
150
注册时间
2004-6-26
论坛徽章:
88
2010广州亚运会纪念徽章:篮球
日期:2011-01-07 22:47:45数据库板块每日发贴之星
日期:2011-04-19 01:01:01SQL大赛参与纪念
日期:2011-04-27 16:16:29数据库板块每日发贴之星
日期:2011-05-07 01:01:02现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-30 22:07:29迷宫蛋
日期:2011-06-13 19:24:11茶鸡蛋
日期:2011-06-17 19:21:39灰彻蛋
日期:2011-07-30 07:20:09ITPUB年度最佳版主
日期:2011-04-08 18:37:09数据库板块每日发贴之星
日期:2011-03-08 01:01:012011新春纪念徽章
日期:2011-03-05 21:30:25
发表于 2012-1-7 11:05:43 |显示全部楼层
原来是误差搞鬼,加个 ROUND(,30)

VAR N NUMBER;
EXEC :N := 100;

WITH
t as(SELECT 2*ROWNUM+1 rn FROM DUAL CONNECT BY ROWNUM <= CEIL(((:n)/2-1-1)/2)
     )
,p AS (
SELECT pn,LOG(10,pn) lg
FROM (
       SELECT rn pn from t
       MINUS
       SELECT t1.rn * t2.rn
         FROM t t1, t t2
       WHERE t1.rn <= t2.rn
             AND t1.rn <=SQRT(:n)
             AND t1.rn * t2.rn <:n/2
       UNION ALL SELECT 2 FROM DUAL
       )
)
,lg AS (
SELECT p1.pn pn1, p1.lg lg1, p2.pn pn2, p2.lg lg2
   FROM p p1,p p2
WHERE p1.pn<p2.pn AND p1.lg+p2.lg<=LOG(10,:n)
)
SELECT SUM(max_p)
   FROM (
SELECT lg.*
       ,(SELECT MAX(POWER(pn1,FLOOR(ROUND((LOG(10,:N)-LEVEL*lg2)/lg1,30)))*POWER(pn2,LEVEL))
          FROM DUAL
         CONNECT BY LEVEL<=FLOOR((LOG(10,:N)-lg1)/lg2)
         ) max_p
   FROM lg
)
/

SUM(MAX_P)
----------
      2262

世界上只有两种编程方法:Oracle的方法和错误的方法。

剑破冰山—Oracle开发艺术 即将隆重推出
http://www.china-pub.com/197199
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10114321

使用道具 举报

版主

路边野花不要,踩!

精华贴数
22
技术积分
56787
社区积分
31354
注册时间
2002-11-27
论坛徽章:
367
复活蛋
日期:2011-12-18 23:13:10迷宫蛋
日期:2012-05-14 21:33:03茶鸡蛋
日期:2012-04-19 16:08:35灰彻蛋
日期:2012-04-01 04:02:032012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51咸鸭蛋
日期:2012-02-23 00:15:47ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41蜘蛛蛋
日期:2011-10-19 13:14:07
发表于 2012-1-7 18:36:08 |显示全部楼层
本帖最后由 lastwinner 于 2012-1-7 18:36 编辑

应该考虑如何利用Oracle和其他开发语言,发挥各自优势,达到最快解决问题的目的。
btw:支持合并,以后这类东西在一个帖子里玩就行,记得之前我们就是这么玩的

使用道具 举报

精华贴数
12
技术积分
60555
社区积分
12362
注册时间
2008-1-16
论坛徽章:
257
版主8段
日期:2012-05-15 15:24:11紫蛋头
日期:2012-05-21 10:19:41
发表于 2012-1-7 20:40:42 |显示全部楼层
268
借助newid的代码

WITH
t as(SELECT 2*ROWNUM+1 rn FROM DUAL CONNECT BY ROWNUM <= CEIL(((:n)/2-1-1)/2)
    )
,p AS (
SELECT pn,LOG(10,pn) lg
FROM (
SELECT 2 pn FROM DUAL
UNION ALL
      SELECT rn pn from t
      MINUS
      SELECT t1.rn * t2.rn
        FROM t t1, t t2
      WHERE t1.rn <= t2.rn
            AND t1.rn <=SQRT(:n)
            AND t1.rn * t2.rn <:n/2
      )
)
,k as (select level l from dual connect by level<=1000)
select count(unique l) from k,p p1,p p2,p p3,p p4
where mod(l,p1.pn) =0 and
mod(l,p2.pn) =0 and mod(l,p3.pn) =0 and mod(l,p4.pn) =0
and p1.pn<p2.pn and p2.pn<p3.pn and p3.pn<p4.pn;
我的新浪微博,欢迎大家加我:http://weibo.com/lu01


剑破冰山—Oracle开发艺术 已经上架销售
网购地址:互动|京东电子工业出版社书店卓越亚马逊当当华储
在线阅读:5lcto华储
源代码:博文视点ITPUB

使用道具 举报

精华贴数
12
技术积分
60555
社区积分
12362
注册时间
2008-1-16
论坛徽章:
257
版主8段
日期:2012-05-15 15:24:11紫蛋头
日期:2012-05-21 10:19:41
发表于 2012-1-7 20:46:00 |显示全部楼层
这样不用unique
WITH
t as(SELECT 2*ROWNUM+1 rn FROM DUAL CONNECT BY ROWNUM <= CEIL(((:n)/2-1-1)/2)
    )
,p AS (
SELECT pn,LOG(10,pn) lg
FROM (
SELECT 2 pn FROM DUAL
UNION ALL
      SELECT rn pn from t
      MINUS
      SELECT t1.rn * t2.rn
        FROM t t1, t t2
      WHERE t1.rn <= t2.rn
            AND t1.rn <=SQRT(:n)
            AND t1.rn * t2.rn <:n/2
      )
)
,k as (select level l from dual connect by level<=1000)
select count(l) from k where exists(select 1 from p p1,p p2,p p3,p p4
where mod(l,p1.pn) =0 and
mod(l,p2.pn) =0 and mod(l,p3.pn) =0 and mod(l,p4.pn) =0
and p1.pn<p2.pn and p2.pn<p3.pn and p3.pn<p4.pn);
我的新浪微博,欢迎大家加我:http://weibo.com/lu01


剑破冰山—Oracle开发艺术 已经上架销售
网购地址:互动|京东电子工业出版社书店卓越亚马逊当当华储
在线阅读:5lcto华储
源代码:博文视点ITPUB

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部