Логическая ошибка в нахождении простого числа между двумя числами

Я пишу код для печати простых чисел между двумя числами, но мой код выдает неправильный вывод и останавливается после его выдачи

http://www.spoj.com/problems/PRIME1/

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t,j,i=0;
cin>>t;
int m,n;
int primes[i];
while(t--)  //t is the number of test-cases
{
cin>>m >>n;   //m and n are the numbers between which prime numbers have to be calculated
for(i=0;i<=n;i++) //Using Sieve algorithm
primes[i]=1;
primes[0]=0;
primes[1]=0;
for(i=2;i<=sqrt(n);i++)
{
if(primes[i]==1)
{
for(j=2;i*j<=n;j++)
primes[i*j]=0;
}
}
for(i=2;i<=n;i++)
{
if(i>=m&&primes[i]==1)//Printing numbers which are greater than m
cout<<i<<"\n";
}
cout<<"\n";
}

-1

Решение

int primes[i];

не является законным C ++. И с тех пор i == 0 это даже не работает C ++.

Очевидно, вам нужно выделять массив достаточно большой.

int *primes;
while(t--)  //t is the number of test-cases
{
cin>>m >>n;   //m and n are the numbers between which prime numbers have to be calculated
primes = new int[n+1]; // allocate a big enough array
...
delete[] primes;
}
0

Другие решения


По вопросам рекламы [email protected]