-3

私はふるいを働かせようとして立ち往生しています。デバッグすると、9 や 15 のようなものがふるいを通過しても true と評価されることがわかります。これは何が原因ですか?また、ベクトルを適切に使用して最高の素因数を取得していますか?

#include <iostream>
#include <vector>
#include <math.h>

int main()
{
    long long n = 13195;
        long long sqrtn = sqrt(n);

        bool* boolarray = new bool[n];

        for(long long i = 0; i<=boolarray[sqrtn]; i++) {
                boolarray[i] = true;
        }

        long long x = 0;

        for(long long i=2; i<=sqrtn; i++) {
                if(boolarray[i]) {
                        for(long long j=pow(i, 2)+x*i; j<=n; j=pow(i, 2)+(++x*i))

                                        boolarray[j] = false;
                }
        }

        std::vector<long> primefactors;

        for(long long i = 0; i<=sqrtn; i++)
        {
                if(boolarray[i] && n % boolarray[i] == 0)
                        primefactors.push_back(i);
        }

        int answer = primefactors.back();

        printf("Answer: %i\n", answer);

        _sleep(10000);

        delete[] boolarray;

    return 0;
}
4

1 に答える 1

1

以下は間違っています。

                    for(long long j=pow(i, 2)+x*i; j<=n; j=pow(i, 2)+(++x*i))

の初期値と更新式jが間違っています。正確に何が間違っているのか、それを修正する方法を理解するための演習として残します。

于 2013-03-03T21:06:46.570 に答える