考虑 x^i+y^i=z^i, x<=y<=z<=m 和 2<=i<=n (m 和 n 是输入) m 可以从 5 变化到 100 n 可以从 2 变化到 100
Posted
技术标签:
【中文标题】考虑 x^i+y^i=z^i, x<=y<=z<=m 和 2<=i<=n (m 和 n 是输入) m 可以从 5 变化到 100 n 可以从 2 变化到 100【英文标题】:consider x^i+y^i=z^i, x<=y<=z<=m and 2<=i<=n (m and n are inputs) m can vary from 5 to 100 n can vary from 2 to 100 【发布时间】:2016-01-10 06:42:13 【问题描述】:考虑 x^i+y^i=z^i, x
这是它的 c 程序
int main()
int m, n;
long long int x, y, z, j;
long long int xe, ye, ze, se;
long long int sum = 0;
scanf("%d", &m);
scanf("%d", &n);
for (j = 2; j <= n; j++)
for (x = 0; x <= m; x++)
for (y = x; y <= m; y++)
for (z = y; z <= m; z++)
xe = pow(x, j);
ye = pow(y, j);
ze = pow(z, j);
se = (xe + ye);
if (ze == se)
printf("\n i = %lld", j);
sum++;
printf("sum= %lld ", sum);
return 0;
因为它不适用于大值(我不想使用大整数:P) 我写了一个等价的python---
import math
m=0
n=0
x=y=z=j=0
xe=ye=ze=se=0
sum=0;
m = int(input("Enter a number: "))
n = int(input("Enter a number: "))
for j in range (2, n):
for x in range (0, m):
for y in range (x, m):
for z in range (y, m):
xe=math.pow(x,j)
ye=math.pow(y,j)
ze=math.pow(z,j)
se=(xe+ye)
if (ze == se):
sum=sum+1
print "sum=", sum
但它也不起作用。谁能告诉我为什么?
【问题讨论】:
如果您想在 python 中执行此操作,我建议您删除 C 代码和 C 标记...您已经针对 C 提出了确切的问题。我 猜测 以获得确切的结果,您还需要在 python 中提供 一些 额外的 big-int 支持,所以在不同的语言中这将是 完全相同的问题(但这只是一个猜测,我不要正常使用python) ***.com/help/how-to-ask 你听说过Fermat's Last Theoremmath.pow
是一个浮点函数。如果您需要精确的值,请不要使用它(因为使用了==
)。只需使用整数幂x**y
。
@JohnWick:请您编辑问题以说明您的代码以何种方式不起作用?如果它给出错误,请显示回溯。如果它给出的结果你认为不正确,请显示输入、你得到的结果,并说出你期望的结果。
【参考方案1】:
有一个流行的数学定理 - Fermat's Great (Last) Theorem - 声明任何整数 n > 2
不存在 非零整数 a
、b
、c
使得a^n + b^n = c^n
.
【讨论】:
小心!您需要排除琐碎的解决方案。 (例如,a = c
、b = 0
。)
@MarkDickinson 已修复。我更擅长在准确的数学上编码)【参考方案2】:
您刚刚遇到语法错误。以下是对我有用的方法:
import math
m=0
n=0
x=y=z=j=0
xe=ye=ze=se=0
sum=0;
m = int(input("Enter a number: "))
n = int(input("Enter a number: "))
for j in range (2, n):
for x in range (0, m):
for y in range (x, m):
for z in range (y, m):
xe=x**j
ye=y**j
ze=z**j
se=(xe+ye)
if (ze == se):
sum=sum+1
print ("sum = "+str(sum))
我正在使用输入 m = 100
n = 10
进行测试,结果得到 850
。
不过,如果您要测试费马大定理:
import math
m=0
n=0
x=y=z=j=0
xe=ye=ze=se=0
sum=0;
m = int(input("Enter a number: "))
n = int(input("Enter a number: "))
for j in range (3, n):
for x in range (1, m):
for y in range (x, m):
for z in range (y, m):
xe=x**j
ye=y**j
ze=z**j
se=(xe+ye)
if (ze == se):
sum=sum+1
print ("sum = "+str(sum))
使用那个^。
【讨论】:
以上是关于考虑 x^i+y^i=z^i, x<=y<=z<=m 和 2<=i<=n (m 和 n 是输入) m 可以从 5 变化到 100 n 可以从 2 变化到 100的主要内容,如果未能解决你的问题,请参考以下文章