无心人
发表于 2009-1-12 14:30:47
不行的
haskell比他们都快
也简单
但都不如C/C++
无心人
发表于 2009-1-12 14:42:00
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
int test(mpz_t pow, int p)
{
unsigned tmp;
int d, i;
char t;
for (i = 0; i < 10; i ++) d = 0;
mpz_get_str(t, 10, pow);
for (i = 0; i < strlen(t); i ++)
d - '0']++;
for (i = 0; i < 10; i ++)
if (d != p)
return 0;
return 1;
}
int main(void)
{
int p, b, i = 0;
mpz_t n, pow;
char start;
printf("输入方幂: ");
scanf("%d", &p);
printf("输入起始数字(最大16位): ");
scanf("%s", start);
mpz_init(pow);
mpz_init(n);
mpz_init(m);
mpz_init(t6);
mpz_set_ui(t6, 1000000);
mpz_set_str(n, start, 10);
b = 0;
printf("\n");
while (b == 0)
{
i ++;
mpz_pow_ui(pow, n, p);
if (test(pow, p) == 1)
{
gmp_printf("找到[%Zd, %Zd]\n", n, pow);
b = 1;
break;
}
mpz_add_ui(n, n, 1);
if (i >= 10000000)
{
i = 0;
gmp_printf("搜索到%Zd\n", n);
}
}
mpz_clear(n);
mpz_clear(pow);
mpz_clear(m);
mpz_clear(t6);
return 0;
}
修改好了
不用预计算了
但这次时间达到了500秒
无心人
发表于 2009-1-12 15:35:24
19的已经搜索到97
估计也是就1个
无心人
发表于 2009-1-12 16:02:49
从8858667905到9873773268
只有一个
已经搜索完
mathe
发表于 2009-1-12 16:11:59
19的确只有一个
无心人
发表于 2009-1-12 16:22:26
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
int test(mpz_t pow, int p)
{
unsigned tmp;
int d, i;
char t;
for (i = 0; i < 10; i ++) d = 0;
mpz_get_str(t, 10, pow);
for (i = 0; i < strlen(t); i ++)
d - '0']++;
for (i = 0; i < 10; i ++)
if (d != p)
return 0;
return 1;
}
int main(void)
{
int p, b, i = 0;
mpz_t n, pow, t10, tp;
printf("输入方幂: ");
scanf("%d", &p);
mpz_init(pow);
mpz_init(n);
mpz_init(t10);
mpz_init(tp);
mpz_set_ui(t10, 1000000000);
mpz_mul_ui(t10, t10, 10);
mpz_set_ui(tp, 10);
mpz_pow_ui(tp, tp, 10*p - 1);
mpz_root(n, tp, p);
mpz_add_ui(n, n, 1);
b = 0;
gmp_printf("初始数字:%Zd\n", n);
while (mpz_cmp(n, t10) < 0)
{
mpz_pow_ui(pow, n, p);
if (test(pow, p) == 1)
gmp_printf("找到[%Zd, %Zd]\n", n, pow);
mpz_add_ui(n, n, 1);
}
mpz_clear(n);
mpz_clear(pow);
mpz_clear(t10);
mpz_clear(tp);
return 0;
}
改成自动的了
只要输入20就能得到所有20次方的恰好有20个0123456789结果
附上程序,没有限制幂的大小
5300多秒扫描一个方幂
无心人
发表于 2009-1-12 16:29:26
输入方幂: 20
初始数字:8912509382
找到[8951993472, 109243381929665290144735387253484896485512153800629962749796403476740675298520463741968915306665585481026029884
06317917558817958274385371306360838853525309513410701102261427360428701722029347911499776]
20的找到一个最小的
经过Haskell核验, 是正确的
无心人
发表于 2009-1-12 16:33:50
同时启动了20, 21
在考虑是否再启动几个
无心人
发表于 2009-1-12 16:37:59
服务器上启动了22, 23
无心人
发表于 2009-1-12 16:53:26
除非停电
明天给出20-23的结果
别人就不要测试20-23了
要测试的
下载我给出的可执行程序
算24以后的
明天写带日志文件的
一口气挂几个连续的幂出来
页:
1
2
[3]
4
5
6
7
8
9
10
11
12