0

私の仕事は、cを使用してfermats理論が正しくないことを証明することです。だから私がしたのはネストされたループを持っていて、それはとても読みやすいです。

コードは次のとおりです。

#include <stdio.h>
#include <math.h>

quadtest(unsigned long long int a, unsigned long long int b, unsigned long long int c, unsigned        int n)
{
if ((pow(a,n)+pow(b,n))==pow(c,n))
    return 1;
else
    return 0;

}    

main()
{
unsigned long long int a;
unsigned long long int b;
unsigned long long int c;
unsigned int n;

//a=1;  b=1;    c=1;    n=1;
for(n=2; n<100; n++)
{
printf("\nn=%d",n);
    for(c=1; c<500; c++)
    {
        printf("\ntrying now c=%d and n=%d",c,n);       
        for(b=1; b<500; b++)
        {
            if (quadtest(a,b,c,n)) break;
            //printf("\nb=%d, n=%d",b,n);

        }
        for(a=1; a<500; a++)
        {
            if (quadtest(a,b,c,n)) break;
            //printf("\na=%d, n=%d",a,n);   
        }
    }
    printf("\nthe right values to prove fermats theory wrong are n=%d,c=%d,b=%d,a=%d",n,c,b,a);
}       





}

コンパイルされた後、imは「c =乱数、n =0を試行します。nは0であるとは想定されていませんが、何らかの理由で常に0になります。

また、「フェルマー理論が間違っていることを証明するための正しい値は、n = 99、c = 500、b = 0、a=500」のようなものを取得しています。

繰り返しになりますが、a、b、c、nのいずれも0ではないはずです。問題が何であるかわからない

4

1 に答える 1

1

コードには 2 つの明らかな問題があります。

いくつかの変数を定義すると、それぞれが を除いて初期化されaます。uninitializedを使用して関数を呼び出しますa。これは未定義の動作であり、問​​題を説明する可能性があります。

第二に、で間違った指定子を使用していますprintf%dに使用されintます。%lluですunsigned long long。間違った指定子を使用すると、誤った値が出力される可能性があります。

于 2013-03-10T21:28:38.317 に答える