- 注册时间
- 2008-2-6
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 51573
- 在线时间
- 小时
|
发表于 2008-11-5 20:26:45
|
显示全部楼层
#include
#include
#include
#define Max 10000
int isPower3(long long pow)
{
long long i, j, t, k;
double l1, l2;
if (pow == 1) return 1;
if ((pow % 2) == 0)
if ((pow % 8) > 0) return 0;
else
return (isPower3(pow >> 3));
if ((pow % 3) == 0)
if ((pow % 27) > 0) return 0;
else
return (isPower3(pow / 27));
if ((pow % 5) == 0)
if ((pow % 125) > 0) return 0;
else
return (isPower3(pow / 125));
if ((pow % 7) == 0)
if ((pow % 343) > 0) return 0;
else
return (isPower3(pow / 343));
l1 = log(pow) / 3 - 0.001;
l2 = l1 + 0.001;
i = floor(exp(l1) - 0.001);
j = floor(exp(l2) + 0.001);
for (t = i; t <= j; t ++)
{
k = t * t * t;
if (k == pow) return 1;
if (k > pow) return 0;
}
return 0;
}
void Test(void)
{
long long i, j, t;
for (i = 7; i <= 7 * Max; i += 7)
for (j = 1; j <= Max; j ++)
{
t = 10 * i * i *i + j * j * j;
if (isPower3(t))
printf("Find: %qd %qd %qd \n", i, j, t);
}
}
int main(void)
{
long long p, t;
if (isPower3(8)) printf("8 is Club.\n");
if (isPower3(1000)) printf("1000 is Club.\n");
if (isPower3(8 * 27)) printf("8 * 27 is Club.\n");
if (isPower3(11 * 11 * 11)) printf("11 * 11 * 11 is Club.\n");
if (isPower3(11 * 11 * 13)) printf("11 * 11 * 13 is Club.\n");
if (isPower3(37 * 37 * 37)) printf("37 * 37 * 37 is Club.\n");
t = 100000;
p = t * (t + 1) * (t + 2);
if (isPower3(p))
printf("%qd * %qd * %qd is Club.\n", t, (t + 1), (t + 2));
Test();
return 0;
}
遍取10000内结果,并没发现解 |
|