私は乱数の範囲を持っています。範囲は実際にはユーザーによって決定されますが、最大 1000 の整数になります。それらは次の場所に配置されます。
vector<int> n
値は次のように挿入されます。
srand(1);
for (i = 0; i < n; i++)
v[i] = rand() % n;
すべての非素数の値を見つけるための別の関数を作成しています。これが私が今持っているものですが、シリーズでプライムとコンポジットの両方を取得するので、それが完全に間違っていることはわかっています.
void sieve(vector<int> v, int n)
{
int i,j;
for(i = 2; i <= n; i++)
{
cout << i << " % ";
for(j = 0; j <= n; j++)
{
if(i % v[j] == 0)
cout << v[j] << endl;
}
}
}
この方法は通常、0 から 1000 までの一連の数字を持っていたときに機能しましたが、順番が狂って重複している場合は機能していないようです。ベクトルで非素数を見つけるためのより良い方法はありますか? 別のベクトルを作成し、n 個の数値で埋めて、その方法で非素数を見つけたくなるのですが、それは非効率的でしょうか?
範囲は 0 ~ 1000 であるため、0 ~ n を並べ替えてベクトルを作成し、ふるいを使用して素数を見つける方が簡単かどうか疑問に思っていますが、これは近づいていますか?
void sieve(vector<int> v, BST<int> t, int n)
{
vector<int> v_nonPrime(n);
int i,j;
for(i = 2; i < n; i++)
v_nonPrime[i] = i;
for(i = 2; i < n; i++)
{
for(j = i + 1; j < n; j++)
{
if(v_nonPrime[i] % j == 0)
cout << v_nonPrime[i] << endl;
}
}
}