SPOJ вопрос № 2, время работы превышает!
Сначала в задаче № 2 "Спой", названной "Генератор праймов", я отправляю этот код и получаю превышение времени работы.
Проблема в:
Питер хочет сгенерировать некоторые простые числа для своей криптосистемы. Помоги ему! Ваша задача - сгенерировать все простые числа между двумя заданными числами!
Входные данные Входные данные начинаются с числа t тестовых случаев в одной строке (t <= 10). В каждой из следующих t строк есть два числа m и n (1 <= m <= n <= 1000000000, nm <= 100000), разделенных пробелом.
Выходные данные Для каждого тестового примера выведите все простые числа p, такие что m <= p <= n, по одному числу в строке, тестовые случаи отделены пустой строкой.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i=0;i<n;i++)
{
int a,b;
cin >> a >> b;
if(a==1)
a++;
for(int j=a;j<=b;j++)
{
int flag=0;
for(int f=2;f<j;f++)
{
if(j%f==0)
flag=1;
}
if(flag==0)
cout << j << endl;
}
cout << "\n";
}
}
после этого я понял, что должен изменить эту строку кода, чтобы пройти только от 2 до sqrt of j.
Я имею в виду это:
for(int f=2;f<(int)sqrt(j);f++)
Пожалуйста, помогите!: |