Witam. Mam wypisać liczby pierwsze na przedziale a...b. Input wygląda tak
Ilość przedziałów
Początek_przedziału1 Koniec_przedziału 1
Początek_przedziału2 Koniec_przedziału 2
np.
2
1 10
60 90
Niestety mój kod działa, lecz zbyt długo się wykonuję.
using System;
public class Test
{
static int BeforeSpace(string before) /// konwertuje napis z wejścia
/// i zwraca liczbę otwierającą przedział
{
int length = before.Length;
string output = "";
for (int i=0; i<length; i++)
{
if (!char.IsWhiteSpace(before[i]))
{
output += before[i];
}
else
{
return Convert.ToInt32(output);
}
}
return 0;
}
static int AfterSpace(string after) /// konwertuje napis z wejścia
/// i zwraca liczbę zamykającą przedział
{
int length = after.Length;
string output = "";
bool startreading = false;
for (int i=0; i<length; i++)
{
if (char.IsWhiteSpace(after[i]))
{
startreading = true;
}
if (startreading)
{
output+=after[i];
}
}
return Convert.ToInt32(output);
}
static bool isPrime(int value) /// określa czy dana liczba jest liczbą pierwszą.
{
bool isPrime = true;
int sqrt = Convert.ToInt32(Math.Sqrt(value));
for (int i = 2; i<=sqrt; i++)
{
if ((value%i)==0)
{
isPrime = false;
}
}
return isPrime;
}
static void returnprime(int a, int b) /// przelatuje po całym przedziale i wywołuje
/// sprawdzanie czy liczba jest pierwsza
/// na każdym elemencie przedziału
{
if (a==1)
{
a=2;
}
for (; a<=b; a++)
{
if (isPrime(a))
{
Console.WriteLine(a);
}
}
Console.WriteLine(Environment.NewLine);
}
public static void Main()
{
int amount = Convert.ToInt32(Console.ReadLine()); /// ilość przedziałów
for (int i = 0; i<amount; i++)
{
string textvalues = Console.ReadLine();
int start_range = BeforeSpace(textvalues); /// zapisuje pierwszą liczbę przed spacją
int end_range = AfterSpace(textvalues); /// zapisuje drugą liczbę po spacji
returnprime(start_range,end_range); /// wyznaczam liczby pierwsze z tego przedziału
}
}
}
Wrzucam kod z przykładowym in/outputem http://ideone.com/8Lzlre
Więc, co mógłbym zmienić?