mathe 发表于 2009-2-26 11:28:58

主要是运行速度还是太慢了,毕竟在规模大起来的时候速度最重要

无心人 发表于 2009-2-26 11:49:46


// prod.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

char l;

unsigned int prodd(unsigned int n)
{
        char c;
        unsigned int i, k = 1;
        sprintf(c, "%u", n);
    for (i = 0; c != 0; i ++)
                k *= (unsigned int)(c - '0');
    return k;
}

void init(void)
{
        unsigned int i, k, n;
        for (i = 0; i <= 9; i ++)
                l = 0;

        for (i = 10; i < 100000000; i ++)
      l = l + 1;
          
      
}       

int isprime(unsigned int n)
{
        if (n & 1 == 0)
                return 0;
        else
                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;
        init();
        printf("init finished.\n");
    for (i = 100000001; i <= 999999999; i ++)
        {
                if (l == 9)
                        if (isprime(i))
                                printf("%u", i);
        }
        return 0;
}
谁来优化下

无心人 发表于 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

否则和题目要求不符

谁证明?
页: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15
查看完整版本: 数字乘积