【发布时间】:2015-04-26 14:52:48
【问题描述】:
我正在尝试计算两个五边形数,它们的和和差将产生另一个五边形数。在我的主要函数中,我使用五边形数定理来产生五边形数和,从而产生一个五边形数,然后我使用 is_pentagonal 函数检查这两个数的差是否也是五边形。
我用 C++ 编写了以下代码,但由于某种原因没有给出正确答案,我不确定错误在哪里。
问题是,当我得到答案 d 时,j 和 k 不是五边形的。 j 和 k 只是超过了数值限制,随机数最终会产生五边形 d,我不明白为什么会发生这种情况。谢谢。
bool is_perfect_square(int n)
{
if (n < 0) return false;
int root = sqrt(n);
return n == root * root;
}
bool is_pentagonal(int n)
{
if(is_perfect_square(24*n + 1) && (int)sqrt(24*n+1)%6 == 5)return true;
return false;
}
int main() {
int j = 0, k = 0, d = 0, n = 1;
while(!is_pentagonal(d))
{
j = (3*n+1)*(3*(3*n+1)-1)/2;
k = (n*(9*n+5)/2)*(3*n*(9*n+5)/2-1)/2;
d = k - j;
++n;
}
cout << d << endl;
return 0;
}
【问题讨论】:
-
您说“和差”,但我没有看到任何总和检查。
-
j+k 将根据五边形数定理产生一个五边形数。所以我需要检查的是差异。我检查了有效性 j+k 并且工作正常,所以我很确定问题不在那个位。
-
您期待的答案是什么?你输出的 d 不是五边形数字吗?
-
@Tony 当我得到答案时,d 是五边形,但 j 和 k 不是。 j 和 k 只是超过了数值限制,随机数最终会产生五边形 d,我不明白为什么会发生这种情况。我检查了 j 和 k 是否是五边形到一个数值极限并且它们每次都是五边形。
-
好的。那么,你确定有可能找到两个这样的数字吗?如果是,你确定你的定理跨越了所有可能的对吗?
标签: c++ number-theory