medie2005 发表于 2009-3-3 09:02:58

今天抽空实现一下,应该能找到12的.

mathe 发表于 2009-3-3 09:16:35

原帖由 无心人 于 2009-3-2 17:43 发表 http://bbs.emath.ac.cn/images/common/back.gif
粗略估计在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


char pl;
unsigned int pd;

unsigned int prodd(unsigned int n)
{
        unsigned int r = 1;
    if (n < 10000) return pd;
        while (n >= 10000)
        {
       r *= pd;
           n /= 10000;
        }
        if (n != 0) r *= pd;
        return r;
}

void init(void)
{
        unsigned int i, j, k, l, n;

        for (i = 0; i <= 9; i ++)
                for (j = 0; j <= 9; j ++)
                        for (k = 0; k <= 9; k ++)
                                for (l = 0; l <= 9; l ++)
                                {
                  if (i == 0)
                                        {
                                                if (j == 0)
                                                {
                                                        if (k == 0)
                                                                n = l;
                                                        else
                                                                n = k * l;
                                                }
                                                else n = j * k * l;
                                        }
                                        else n = i * j * k * l;

                                        pd = n;
                                }


        for (i = 0; i <= 9; i ++)
                pl = 0;

        for (i = 10; i < 100000000; i ++)
        {
                k = prodd(i);
      pl = pl + 1;      
        }
}       

int isprime(unsigned int n)
{
        if (n % 2 == 0) return 0;
        if (n % 3 == 0)        return 0;
        if (n % 5 == 0) return 0;
        if (n % 7 == 0) return 0;
        if (n % 11 == 0) return 0;
        if (n % 13 == 0) return 0;
        if (n % 17 == 0) return 0;
        if (n % 19 == 0) return 0;
        if (n % 23 == 0) return 0;
        if (n % 29 == 0) return 0;
        if (n % 31 == 0) return 0;
    return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
        unsigned int i, k = 1, n, p;
        init();
        printf("init finished.\n");

        unsigned int max = 0;
        for (i = 0; i < 100000000; i ++)
      if (max < (unsigned int)pl) max = (unsigned int)pl;

        printf("MAX Product of digits level: %u\n", max);

    for (i = 100000001; i <= 4099999999; i ++)
        {
          if (isprime(i))
                {
                  n = prodd(i);
                  p = 0;
                  while (n >= 100000000)
                  {
                          p ++;
                          n = prodd(n);
          }
                  
                  p += pl + 1;
                  if (p >= 10)
                          printf("%u:%u\n", i, p);
                }
      k ++;
                if (k % 100000000 == 0)
                {
                        printf("\n%u\n", k);
                }
        }
        return 0;
}

无心人 发表于 2009-3-3 11:03:37

P(3777888899) = 10

无心人 发表于 2009-3-3 11:05:06

11的大于10^10

mathe 发表于 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阶的基本应该不能比这个更加小了。
应该只需要穷举第一个数字的所有可能组合就可以了

medie2005 发表于 2009-3-3 13:19:19

呵呵,为了保险,还是得找10^15内的10阶数,然后,看其中有没有更优者.
不过,mathe给的结果确实是使p(n)=11的最小素数n.

[ 本帖最后由 medie2005 于 2009-3-3 13:21 编辑 ]

medie2005 发表于 2009-3-3 13:37:33

p(n)=12要困难很多.
我目前正在找10^100内的11阶数, 但目前未发现一个.
页: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16
查看完整版本: 数字乘积