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

[讨论] 数字乘积

[复制链接]
 楼主| 发表于 2009-3-3 09:02:58 | 显示全部楼层
今天抽空实现一下,应该能找到12的.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-3 09:16:35 | 显示全部楼层
原帖由 无心人 于 2009-3-2 17:43 发表 粗略估计在10^60内你说的数字就是 小于199 * 125 * 85 * 70个 不知道每个数字的对应数字是多少候选?? 应该是一对多啊
数目应该约等于$1/{4}!log^4(10^60)/{log(2)log(3)log(5)log(7)}~=6364870.77$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-3 10:32:17 | 显示全部楼层
我穷搜10的 竟然发现Cache 10^8以下的最高是4 不知道错在哪里??
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-3 10:56:50 | 显示全部楼层
最新测试,似乎10对应的素数大于10^9
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-3 10:58:44 | 显示全部楼层
  1. char pl[100000000];
  2. unsigned int pd[10000];
  3. unsigned int prodd(unsigned int n)
  4. {
  5. unsigned int r = 1;
  6. if (n < 10000) return pd[n];
  7. while (n >= 10000)
  8. {
  9. r *= pd[n % 10000];
  10. n /= 10000;
  11. }
  12. if (n != 0) r *= pd[n % 10000];
  13. return r;
  14. }
  15. void init(void)
  16. {
  17. unsigned int i, j, k, l, n;
  18. for (i = 0; i <= 9; i ++)
  19. for (j = 0; j <= 9; j ++)
  20. for (k = 0; k <= 9; k ++)
  21. for (l = 0; l <= 9; l ++)
  22. {
  23. if (i == 0)
  24. {
  25. if (j == 0)
  26. {
  27. if (k == 0)
  28. n = l;
  29. else
  30. n = k * l;
  31. }
  32. else n = j * k * l;
  33. }
  34. else n = i * j * k * l;
  35. pd[1000*i + 100*j + 10*k + l] = n;
  36. }
  37. for (i = 0; i <= 9; i ++)
  38. pl[i] = 0;
  39. for (i = 10; i < 100000000; i ++)
  40. {
  41. k = prodd(i);
  42. pl[i] = pl[k] + 1;
  43. }
  44. }
  45. int isprime(unsigned int n)
  46. {
  47. if (n % 2 == 0) return 0;
  48. if (n % 3 == 0) return 0;
  49. if (n % 5 == 0) return 0;
  50. if (n % 7 == 0) return 0;
  51. if (n % 11 == 0) return 0;
  52. if (n % 13 == 0) return 0;
  53. if (n % 17 == 0) return 0;
  54. if (n % 19 == 0) return 0;
  55. if (n % 23 == 0) return 0;
  56. if (n % 29 == 0) return 0;
  57. if (n % 31 == 0) return 0;
  58. return 1;
  59. }
  60. int _tmain(int argc, _TCHAR* argv[])
  61. {
  62. unsigned int i, k = 1, n, p;
  63. init();
  64. printf("init finished.\n");
  65. unsigned int max = 0;
  66. for (i = 0; i < 100000000; i ++)
  67. if (max < (unsigned int)pl[i]) max = (unsigned int)pl[i];
  68. printf("MAX Product of digits level: %u\n", max);
  69. for (i = 100000001; i <= 4099999999; i ++)
  70. {
  71. if (isprime(i))
  72. {
  73. n = prodd(i);
  74. p = 0;
  75. while (n >= 100000000)
  76. {
  77. p ++;
  78. n = prodd(n);
  79. }
  80. p += pl[n] + 1;
  81. if (p >= 10)
  82. printf("%u: %u\n", i, p);
  83. }
  84. k ++;
  85. if (k % 100000000 == 0)
  86. {
  87. printf("\n%u\n", k);
  88. }
  89. }
  90. return 0;
  91. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-3 11:03:37 | 显示全部楼层
P(3777888899) = 10
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-3 11:05:06 | 显示全部楼层
11的大于10^10
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-3 13:11:05 | 显示全部楼层
因子都是2,3,5,7的最小10阶数为$4996238671872=2^19*3^4*7^6$ 其次为$937638166841712=2^4*3^20*7^5$ 而通过第一个数字,可以构造出一个素数277777788888989。11阶的基本应该不能比这个更加小了。 应该只需要穷举第一个数字的所有可能组合就可以了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-3 13:19:19 | 显示全部楼层
呵呵,为了保险,还是得找10^15内的10阶数,然后,看其中有没有更优者. 不过,mathe给的结果确实是使p(n)=11的最小素数n. [ 本帖最后由 medie2005 于 2009-3-3 13:21 编辑 ]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-3 13:37:33 | 显示全部楼层
p(n)=12要困难很多. 我目前正在找10^100内的11阶数, 但目前未发现一个.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-12-22 17:40 , Processed in 0.027543 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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