鬼谷子先生有两个绝顶聪明的门徒,一个叫孙宾(后来改名孙膑),一个叫庞涓。 
有一天鬼谷子对他们说:“两个大于1而小于100的自然数相加=X,相乘=Y。谁能猜出我说的这两个自然数是多少?” 
庞涓说:“条件太少了。X,Y都不知道,我没有办法算。” 
“好,你附耳过来。”鬼谷子悄悄地告诉庞涓X是多少。然后又悄悄地告诉孙宾Y是多少。 
“现在你们分别知道X,Y,谁能说出答案?” 
庞涓想了一会,得意地说:“虽然我不知道答案是哪两个自然数,但是我知道孙宾也不知道这两个数是多少!” 
孙宾淡淡一笑:“听你一说,现在我倒知道这两个数是多少了。” 
庞涓大吃一惊:“慢,你先别说答案。”他又想了一会说:“师傅,我也知道这两个数是多少了。” 
你知道这两个自然数是多少吗??
=========================================================================
怎么找出这两个数啊?不知道从哪儿开始,要求编程求出,其实要求是最好用SQL写出,SQL可以得满分,其他方式编程可以及格,搞不完就不能回家过年了,大家帮帮我啊,谢谢谢谢了

解决方案 »

  1.   

    想不出来, 所以搜索了一个解法. 实在想不出的可以看看.http://www.gaonaojin.com/city/printpage.asp?BoardID=5&ID=16032
      

  2.   

    a+b=x
    a*b=y
    x+y=(a+b)+(a*b)设:x=y
    a+b=a*ba=a*(b-1)
    b-1=1
    b=2a+2=a*2
    a+2=a+a
    a=2结果
    a=2,b=2
      

  3.   

    真没想到啊--  鬼谷算法及其详细推理过程
    有张三和李四两个人,还有一个考官。
    考官说我这里有两个数字,这两个数字的范围在2到100之间。
    然后他告诉我张三这两个数字的和,告诉了李四这两个数字的乘积。
    让张三和李四说出这两个数字分别是多少。
    张三看了看“和”,说“你肯定不知道这两个数字是多少。”
    李四听了这话,想了想,说,“那么,我现在知道这两个数字是多少了。”
    张三听了李四的话,也说:“那我也知道是多少了”。
    朋友们,你们知道是多少了吗?
    是怎么知道的呢?
    推理过程:
    “张三看了看“和”,说“你肯定不知道这两个数字是多少。””
    李四不知道这两个数字是多少,说明这两个数字不可能都是质数,否则将这两个数字的
    积(
    设为A)分解质因数既可还原。
    同样A不可能有大于50的质因数,否则A只有一种拆分方法(其他拆分方法必有大于100的

    数)。
    既然张三可以肯定李四不知道这两个数字,说明这两个数的和(设为B)不可能分解为两

    质数的和。因为任何大于4的偶数都可以分解为两个质数之和(哥德巴赫猜想),所以,

    B必为奇数,也就是说这两个数是一奇一偶。
    同样B不可能等于“质数+2”
    另:B不可能大于54。因为任何大于54的数都可以拆分成53+X的形式,而53和任意自然数

    积一定有质因数53,与上述分析矛盾。
    这样两数之和B的范围大大缩小。
    那么这两个数的和B只可能等于:
    11 17 23 27 29 35 37 41 47
    中的一个。
    "李四听了这话,想了想,说,“那么,我现在知道这两个数字是多少了。”"
    看看各种可能的B的各种拆分方式所得到的积:
    11(2*9=18、3*8=24、4*7=28、5*6=30)
    17(2*15=30、3*14=42、4*13=52、5*12=60、6*11=66、7*10=70、8*9=72)
    23(2*21=42、……)
    ……
    47(……)
    可以看出,30、42等作为积出现了不止一次,所以两数之积A不可能是30、42等。
    我们把这样的数从上表中划去,剩下的数就是可能的积,而对应的拆分方法我们称之为
    可能
    拆分。
    这个工作量比较大,先不忙划,继续往下分析。
    “ 张三听了李四的话,也说:“那我也知道是多少了”。”
    这句话说明,最终的B值只包含一种可能拆分。
    好,我们再看。
    11可拆分为4+7和8+3,均为可能拆分。(因为28和24均不可能有其它的奇数*偶数的表示

    式了)。
    23可拆分为4+19和16+7,均为可能拆分。(因为68和112均不可能有其它的奇数*偶数的
    表示
    形式了)。
    27可拆分为4+23和8+19。
    35可拆分为4+31,16+19和32+3。
    37可拆分为8+29和32+5。
    47可拆分为4+43和16+31。
    另:
    29可拆分为6+23和16+13均为可能拆分
    41可拆分为4+37和10+31,均为可能拆分。(请读者自己验证)
    好了,现在只剩下17。
    拆拆看:
    17(2*15=30、3*14=42、4*13=52、5*12=60、6*11=66、7*10=70、8*9=72)
    不难验证,其中30、42、60、66、70、72均不是可能的A值,只有4*13一种拆分方法。
    所以答案:
    4和13!
    附本题的另一个版本:
    鬼谷子先生有两个绝顶聪明的门徒,一个叫孙宾(后来改名孙膑),一个叫庞涓。
    有一天鬼谷子对他们说:“两个大于1而小于100的自然数相加=X,相乘=Y。谁能猜出我说的这两个自然数是多少?”
    庞涓说:“条件太少了。X,Y都不知道,我没有办法算。”
    “好,你附耳过来。”鬼谷 忧那牡 告诉庞涓X是多少。然后又悄悄地告诉孙宾Y是多少。
    “现在你们分别知道X,Y,谁能说出答案?”
    庞涓想了一会,得意地说:“虽然我不知道答案是哪两个自然数,但是我知道孙宾也不知道这两个数是多少!”
    孙宾淡淡一笑:“听你一说,现在我倒知道这两个数是多少了。”
    庞涓大吃一惊:“慢,你先别说答案。”他又想了一会说:“师傅,我也知道这两个数是多少了。”
    你知道这两个自然数是多少吗???
      

  4.   

    庞涓看了 X ,说孙宾不知道这两个数字是多少,说明这两个数字不可能都是质数,否则将这两个数字的积分解质因数既可知道。 
    同样 Y 不可能有大于50的质因数,否则 Y 只有一种拆分方法(其他拆分方法必有大于100的因数)。 
    既然庞涓可以肯定孙宾不知道这两个数字,说明 X 不可能分解为两个质数的和。因为任何大于4的偶数都可以分解为两个质数之和(哥德巴赫猜想),所以,这 X 必为奇数,也就是说这两个数是一奇一偶。
    同样 X 不可能等于“质数+2”
    另:X 不可能大于54。因为任何大于54的数都可以拆分成 53+M 的形式,而53和任意自然数的积一定有质因数53,与上述分析矛盾。
    那么 X 只可能等于:11 17 23 27 29 35 37 41 47 中的一个。  孙宾听了之后说知道这两个数了,各种可能的 Y 的各种拆分方式所得到的积: 
    11(2*9=18、3*8=24、4*7=28、5*6=30) 
    17(2*15=30、3*14=42、4*13=52、5*12=60、6*11=66、7*10=70、8*9=72) 
    23(2*21=42、……) 
    …… 
    47(……) 
    可以看出,30、42等作为积出现了不止一次,所以两数之积 Y 不可能是30、42等。 
    我们把这样的数从上表中划去,剩下的数就是可能的积,而对应的拆分方法我们称之为可能拆分。 
    “ 庞涓听了孙宾的话,也说:“那我也知道是多少了”。” 
    这句话说明,最终的 X 值只包含一种可能拆分。 
    11可拆分为4+7和8+3,均为可能拆分。(因为28和24均不可能有其它的奇数*偶数的表示形式了)。 
    23可拆分为4+19和16+7,均为可能拆分。(因为68和112均不可能有其它的奇数*偶数的表示形式了)。 
    27可拆分为4+23和8+19。 
    35可拆分为4+31,16+19和32+3。 
    37可拆分为8+29和32+5。 
    47可拆分为4+43和16+31。 
    另: 
    29可拆分为6+23和16+13均为可能拆分 
    41可拆分为4+37和10+31,均为可能拆分。
    好了,现在只剩下17。 
    拆拆看: 
    17(2*15=30、3*14=42、4*13=52、5*12=60、6*11=66、7*10=70、8*9=72) 
    不难验证,其中30、42、60、66、70、72均不是可能的 Y 值,只有4*13一种拆分方法。 
    所以答案: 4和13
      

  5.   

    --SQL解
    --建立需要的表
    create table a (
    id int identity(1,1) not null,
    i int null,
    j int null,
    he int null,
    ji int null
    )
    gocreate table b (
    id int null,
    i int null,
    j int null,
    he int null,
    ji int null
    )
    gocreate table ji (
    ji int null,
    cou int null
    )
    gocreate table he (
    he int null,
    cou int null
    )
    go--插入从2到100的所有数资料到表a
    declare @i int
    declare @j int
    set @i=2
    while @i<100 begin
    set @j=@i+1
    while @j<100 begin
    insert into a(i,j,he,ji) values(@i,@j,@i+@j,@i*@j)
    set @j=@j+1
    end
    set @i=@i+1
    end
    go--统计所有出现的积的出现次数放入表ji
    insert into ji
    select ji,count(ji) as cou from a
    group by ji
    go--查看符合条件的和 --这一步可以不执行
    --select distinct(he) from a where he not in (
    -- select he from a where ji in (
    -- select ji from ji where cou=1))
    --go
    --结果: 11 17 23 27 29 35 37 41 47 53--查找到所有和为上面结果的行写入表b中
    insert into b 
    select * from a where he in(
    select distinct(he) from a where he not in (
    select he from a where ji in (
    select ji from ji where cou=1)))
    go--删除表ji中所有数据
    delete from ji--将符合条件的积的出现次数写入表ji
    insert into ji
    select ji,count(ji) as cou from a where he in (select distinct(he) from b) 
    group by ji order by cou
    go--将符合条件的和的出现次数写入表he
    insert into he
    select he,count(he) as cou from b where ji in (select ji from ji where cou=1) 
    group by he
    go--查询到最后结果
    select i as '第一个数',j as '第二个数',he as '和',ji as '积' from b where 
    he in(select he from he where cou=1) and 
    ji in (select ji from ji where cou=1) 
    go--清理用过的表
    drop table a
    drop table b
    drop table he
    drop table ji
      

  6.   

    回复人: Tiveone(Tiveone) ( ) 信誉:100  2006-01-23 14:46:00  得分: 0  
     
     
       a+b=x
    a*b=y
    x+y=(a+b)+(a*b)设:x=y‘为什么x=y呢?
    a+b=a*ba=a*(b-1)
    b-1=1
    b=2a+2=a*2
    a+2=a+a
    a=2结果
    a=2,b=2