4

例: ![数学] http://mathurl.com/83cpbet.png

分割を全体として適用すると、結果は次のようになります。

http://mathurl.com/79p3hoh

合計式は次の式で与えられます。 合計

上記は、合計の規則を使用して、O(1)で簡単に計算できます。

ただし、各項に個別に適用すると(商の小数点以下で切り捨て)、= 0 + 1 + 1 + 2 + 3 + 3 + 4 + 5=19になります。[Cで通常int/int除算を使用]

上記の方法では、合計のルールを適用できないため、O(N)が必要です。

上記は、最後ではなく各項に除算を適用した方が精度が低下するためだと理解しています。しかし、これはまさに私が必要としているものです。[上記の例では、19が必要なソリューションであり、21ではありません]

合計と同様に、各項に個別に除算を適用するためのショートカットとして機能する式はありますか?

4

6 に答える 6

3

だから、あなたは得る:

0 +(1 + 1 + 2)+(3 + 3 + 4)+ 5

これに3を掛けましょう。

0 +(3 + 3 + 6)+(9 + 9 + 12)+ 15

そしてそれを(1 + ... + 15)/3の分子と比較してください:

1 +(3 + 5 + 7)+(9 + 11 + 13)+ 15

求めている合計が、分子に対して3項ごとに3つ、または平均してすべての項で1つ失われていることがはっきりとわかります。そして、用語をトリプルにグループ化する方法は重要ではありません。

(0 + 3 + 3)+(6 + 9 + 9)+ 12 + 15
(1 + 3 + 5)+(7 + 9 + 11)+ 13 + 15

あるいは

0 + 3 +(3 + 6 + 9)+(9 + 12 + 15)
1 + 3 +(5 + 7 + 9)+(11 + 13 + 15)

したがって、合計* 3は、(1 + ... + 15)/3の分子よりも項の数だけ少なくなります。

また、分子は、等差数列の合計の式を使用して計算できますn。2、ここnで、は合計の項の数です。

1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 = 2 8 = 64

ここで、64から8を引き、56を取得し、それを3で除算すると、18.6(6)が得られます。n(項の数)が3の倍数ではなかったため、この数は19と等しくありません。

したがって、最終的な式は正確には(n2 - n)/ 3ではありませんが、値が正しいものと最大で1だけ異なります。

実際、それは次のとおりです。

(n * n-n + 1)/ 3は切り捨てられるか、整数除算を使用して計算されます。

それに番号を差し込むと、次のようになります。

(8 * 8-8 + 1)/ 3 = 57/3 = 19

于 2012-05-05T05:08:04.997 に答える
1

簡単な答え:はい、そのような公式があります。

長い答え(私はあなたが式が欲しいと思うので):

取得方法:合計式とint除算の合計の違いは、各被加数でのint除算の丸めに起因することをすでに理解しています。

行を含むテーブルを作成します。

最初の行は、完全な精度で除算したときの各被加数の結果です。

2行目、整数除算を実行したときの各被加数の再利用。

そして3行目、両方の違い。

これで、パターン、常に1 / 3、0、2/3を実現する必要があります。

これは3による除算から生じたものであり、必要に応じてその形式を証明できます(例:誘導)。

したがって、最終的には、式は次のようになります。(n ^ 2)/ 3-(n / 3)

n * n / 3は通常の合計式であり、完全な3つの被加数1がすべて失われる場合は、n/3を減算します。

于 2012-05-05T06:09:48.737 に答える
1

結果は次のようになります

1+1 + 2 + 3+3 + 4 + 5+5 + 6 + 7+7 + 8 + 9+9 + 10 + ...

つまり、すべての奇数が2回表示され、すべての偶数が1回表示されます。最初のn自然数n*(n+1)/2の合計は、最初のn偶数の自然数の合計がその2倍になり、n代わりに最初の奇数の合計がになりn*nます。

必要な結果を得るためのすべての要素が揃ったと思います...

于 2012-05-05T06:19:51.087 に答える
1

必要な合計は、nsを増やすために:1、2、4、7、10、14、19、24、30、36 .. ..

これらをオンライン整数列大辞典™(OEIS™)に接続すると、要件に合ったシリーズとしてA007980を入手できます。a(n)= ceil((n + 1)*(n + 2)/ 3)として計算されます。

これにより、a(0)= 1、a(1)= 2、a(6)= 19になります。これは、インデックスが2だけオフセットされることを意味します。sum(1,8)= a(8-2)。

于 2012-05-05T06:21:53.897 に答える
0
Σ((2i+1)/3) where i =0 to n-1 and Σ((2i+1)/3) = n*n/3
于 2012-05-05T05:27:54.263 に答える
0
#include <stdio.h>

typedef struct fraction {
    int n;//numerator
    int d;//denominator
} Fraction;

int gcd(int x, int y){
    x = (x < 0)? -x : x;
    y = (y < 0)? -y : y;
    while(y){
        int wk;
        wk = x % y;
        x = y;
        y = wk;
    }

    return x;
}

Fraction rcd(Fraction x){
    int gcm;
    gcm = gcd(x.n, x.d);
    x.n /= gcm;
    x.d /= gcm;
    return x;
}

Fraction add(Fraction x, Fraction y){
    x.n = y.d*x.n + x.d*y.n;
    x.d = x.d*y.d;
    return rcd(x);
}

int main(void){
    Fraction sum = {0,1};
    int n;

    for(n=1;n<=8;++n){
        Fraction x = { 2*n-1, 3 };
        sum = add(sum, x);
    }
    printf("%d/%d=",sum.n,sum.d);
    printf("%d",sum.n/sum.d);

    return 0;
}
于 2012-05-05T10:56:11.610 に答える