考虑 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 Theorem math.pow 是一个浮点函数。如果您需要精确的值,请不要使用它(因为使用了==)。只需使用整数幂x**y @JohnWick:请您编辑问题以说明您的代码以何种方式不起作用?如果它给出错误,请显示回溯。如果它给出的结果你认为不正确,请显示输入、你得到的结果,并说出你期望的结果。 【参考方案1】:

有一个流行的数学定理 - Fermat's Great (Last) Theorem - 声明任何整数 n &gt; 2 不存在 非零整数 abc 使得a^n + b^n = c^n.

【讨论】:

小心!您需要排除琐碎的解决方案。 (例如,a = cb = 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的主要内容,如果未能解决你的问题,请参考以下文章

用C语言做,输入三个整数x,y,z,请把这三个数由小到大输出

汉若塔递归算法

CH5102Mobile Service

任意次方的最后三位

输入三个整数x,y,z,请把这三个数由小到大输出

bzoj2005: [Noi2010]能量采集