找回密码
 欢迎注册
楼主: medie2005

[讨论] 数字乘积

[复制链接]
发表于 2009-2-26 11:28:58 | 显示全部楼层
主要是运行速度还是太慢了,毕竟在规模大起来的时候速度最重要
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-26 11:49:46 | 显示全部楼层
  1. // prod.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. char l[100000000];
  5. unsigned int prodd(unsigned int n)
  6. {
  7. char c[17];
  8. unsigned int i, k = 1;
  9. sprintf(c, "%u", n);
  10. for (i = 0; c[i] != 0; i ++)
  11. k *= (unsigned int)(c[i] - '0');
  12. return k;
  13. }
  14. void init(void)
  15. {
  16. unsigned int i, k, n;
  17. for (i = 0; i <= 9; i ++)
  18. l[i] = 0;
  19. for (i = 10; i < 100000000; i ++)
  20. l[i] = l[prodd(i)] + 1;
  21. }
  22. int isprime(unsigned int n)
  23. {
  24. if (n & 1 == 0)
  25. return 0;
  26. else
  27. if (n % 3 == 0)
  28. return 0;
  29. if (n % 5 == 0) return 0;
  30. if (n % 7 == 0) return 0;
  31. if (n % 11 == 0) return 0;
  32. if (n % 13 == 0) return 0;
  33. if (n % 17 == 0) return 0;
  34. if (n % 19 == 0) return 0;
  35. if (n % 23 == 0) return 0;
  36. if (n % 29 == 0) return 0;
  37. if (n % 31 == 0) return 0;
  38. return 1;
  39. }
  40. int _tmain(int argc, _TCHAR* argv[])
  41. {
  42. unsigned int i;
  43. init();
  44. printf("init finished.\n");
  45. for (i = 100000001; i <= 999999999; i ++)
  46. {
  47. if (l[prodd(i)] == 9)
  48. if (isprime(i))
  49. printf("%u ", i);
  50. }
  51. return 0;
  52. }
复制代码
谁来优化下
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-26 13:05:08 | 显示全部楼层
有几点需要明确的是 假设反推 需要的数字 1、大于2位的就应该位数里不能有0了 2、只含有因子2,3,5,7, 如果大于99,则只含有因子2,3,7 3、任何级别的数字都不能大于该数字的位数,否则肯定不行 (和题目的要求相符) 4、数字分解得到的数字(反推)也应该符合这个规则 我觉得从级别2开始比较好 即25以上的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-26 13:10:54 | 显示全部楼层
这么考虑下来 27, 28, 36,45, 48, 54, 56, 63, 64, 72, 75, 84, 96是唯一的开始反推的数列
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-26 13:13:57 | 显示全部楼层
27 = 3 * 3 * 3 27 <- 39 27 <- 93 27 <- 333 27 <- 139 27 <- 193 27 <- 319 27 <- 913 27 <- 391 27 <- 931 不符合
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-26 13:14:46 | 显示全部楼层
同样的分析适合28
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-26 13:23:08 | 显示全部楼层
63 = 3 * 3 * 7 63 <- 79 63 <- 97 63 <- 337 63 <- 373 63 <- 733 63 <- 179 63 <- 197 63 <- 719 63 <- 917 63 <- 791 63 <- 971 均不符合
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-26 13:28:57 | 显示全部楼层
36 = 2 * 2 * 3 * 3 36 <- 49 36 <- 94 36 <- 263 36 <- 236 36 <- 229 36 <- 292 36 <- 343 36 <- 334 36 <- 326 36 <- 362 也不符合吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-26 13:34:37 | 显示全部楼层
谁能用程序分析下这几个数字 目前知道54是可以做逆推的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-26 13:35:43 | 显示全部楼层
另外,怀疑逆推时 不能有1 否则和题目要求不符 谁证明?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-23 16:12 , Processed in 0.024233 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表