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