Chinaunix

标题: 麻烦大家帮我看看这道题 [打印本页]

作者: konakoma    时间: 2005-11-12 16:33
标题: 麻烦大家帮我看看这道题
某四位数的各位数字的平方和等于100 问满足这个条件的四位书且是素数的数共有几个?
有人知道答案吗》在线等
作者: konakoma    时间: 2005-11-12 16:43
大家都不会吗?
这么多人看了,没一个人做出来吗?
作者: konakoma    时间: 2005-11-12 16:43
大家都不会吗?
这么多人看了,没一个人做出来吗?
作者: xwzss    时间: 2005-11-12 17:39

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int m, n;
  5.        
  6.         int sum = 0;

  7.         int counter = 0;

  8.        
  9.         for (n = 1000; n <= 9999; n++)
  10.         {
  11.                
  12.                 for (m = 2; m < n; m++)
  13.                 {
  14.                         if (n % m == 0)
  15.                                
  16.                                 goto fuck;
  17.                 }
  18.                
  19.                 if ((n / 1000) * (n / 1000) +  
  20.                         (n / 100 % 10) * (n / 100 % 10) +
  21.                         (n / 10 % 10) * (n / 10 % 10) +
  22.                         (n % 10) * (n % 10) == 100)
  23.                         counter++;
  24. fuck:
  25.                 continue;
  26.         }

  27.         printf("%dn", counter);
  28.        
  29.         return 0;
  30. }
复制代码


代码很臭,没有技术含量.
作者: xwzss    时间: 2005-11-12 17:42
求出来是5个.
作者: win_hate    时间: 2005-11-12 18:21
设这个 4 位数是 xyzw, 则

x^2+y^2+z^2+w^2=0 (mod 4)

左边 mod 4 的结果可能为  0 0 0 0 或 1 1 1 1, 前者不为素数,所以
x^2=y^2=z^2=w^2 (mod 4)

即 x, y, z, w 均为奇数,可为 1, 3, 5, 7, 9 平方后为  1, 9, 25, 49, 81

(1) 设 x, y, z ,w  中最大者为 9

则 100-9^2 = 19 = 1 + 9 + 9 ==>  {x, y, z, w} ={1, 3, 3, 9}

(2) 设 x, y, z, w 中最大者为  7

则 100-7^2 = 51 = 49 + 1 + 1 = 25 + 25 + 1, 故
{x, y, z, w} = {1, 1, 7, 7}  或 {1, 5, 5, 7}
但对后者, 1+5+5+7 是 3 的倍数,构成的必定是合数
前者同样不能构成素数,这是因为
1000x+100y+10z+w = 10(100x+z) + (100y+w)
如果 x, z 相同,则 y,w 相同, 有因子 101
如果 x,z 不同,则 y, w 也不同。 如果 x =y, 则  z=w ==> 有因子 100x+z。如果 x!=y
则 1000x+100y+10z+w = 100*701+107 或 100*107+701  均为合数。

(3) 设 x,y, z, w 中最大者为 5
则 {x,y,z,w} = {5, 5,5,5}  xyzw 不是素数。

总之, 只有 {1, 3, 3, 9} 这种情况, 共 4!/2!= 12  种情况,排除掉合数就行了。
作者: xujunxp    时间: 2005-11-12 18:30
强啊
作者: yarco1    时间: 2005-11-12 19:00
BZ...不是很明白...
x^2+y^2+z^2+w^2=0 (mod 4)

左边 mod 4 的结果可能为  0 0 0 0 或 1 1 1 1, 前者不为素数,所以
x^2=y^2=z^2=w^2 (mod 4)

这个...为什么不是0211/0301 ?
作者: dbcat    时间: 2005-11-12 19:16
原帖由 win_hate 于 2005-11-12 18:21 发表
设这个 4 位数是 xyzw, 则

x^2+y^2+z^2+w^2=0 (mod 4)

左边 mod 4 的结果可能为  0 0 0 0 或 1 1 1 1, 前者不为素数,所以
x^2=y^2=z^2=w^2 (mod 4)

即 x, y, z, w 均为奇数,可为 1, 3, 5, 7, 9 平方 ...


A shell program can solve that:


$ var=($(seq 1000 9999 | factor |awk -F':' '$1==$2{print $1}'))
$ x=0
$ while((x++<${#var[@]})); do echo "${var[x]:0:1}^2+${var[x]:1:1}^2+${var[x]:2:1}^2+${var[x]:3:1}^2" | bc ; done| sed -n '/100/='

result:
var[126]=1933
var[298]=3319
var[309]=3391
var[377]=3931
var[963]=9133
作者: win_hate    时间: 2005-11-12 19:33
dbcat,你的 shell 好牛哦,好象能干任何事情。几时教教我吧
作者: yarco1    时间: 2005-11-12 19:39
原帖由 dbcat 于 2005-11-12 19:16 发表
A shell program can solve that:


$ var=($(seq 1000 9999 | factor |awk -F':' '$1==$2{print $1}'))
$ x=0
$ while((x++<${#var[@]})); do echo "${var[x]:0:1}^2+${var[ ...


是mm么? 是mm的教我...
作者: dbcat    时间: 2005-11-12 19:43
原帖由 win_hate 于 2005-11-12 19:33 发表
dbcat,你的 shell 好牛哦,好象能干任何事情。几时教教我吧



晕,过奖了

老大de数学水平那么高,不用编程就知道答案 .
我还有很多东东向你学习ne.

shell方面,比waker,烈火,我差好多ne..






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2