|
|
вернуться в форумAccepted c# Послано RolJan 15 май 2018 18:16 using System; using System.Collections.Generic; namespace Timus { public class Program { static void Main(string[] args) { Cryptography_1086 firstSolution = new Cryptography_1086(); firstSolution.CalculatePrimes(); firstSolution.GetNumbersFromInput(); //firstSolution.GetNumbersFromInputForTests(15000); firstSolution.FindPrimesAndListInConsole(); } } public class Cryptography_1086 { int numbersAmount_k = 0; int currentPrimeNumberValue = 2; const int maxNumberValue = 15001; public List<int> PrimeNumbersList { get; set; } public List<int> SearchedPrimeNumbersIndexes { get; set; } public Cryptography_1086() { PrimeNumbersList = new List<int>(); SearchedPrimeNumbersIndexes = new List<int>(); PrimeNumbersList.Add(currentPrimeNumberValue); PrimeNumbersList.Add(++currentPrimeNumberValue); } public void CalculatePrimes() { while (PrimeNumbersList.Count <= maxNumberValue) { if (IsPrime(++currentPrimeNumberValue)) { PrimeNumbersList.Add(currentPrimeNumberValue); } } } public bool IsPrime(int number) { if (number % 2 == 0 || number % 3 == 0) return false; int i = 5; while (i * i <= number) { if (number % i == 0 || number % (i + 2) == 0) return false; i += 6; } return true; } public void GetNumbersFromInput() { Int32.TryParse(Console.ReadLine(), out numbersAmount_k); if (numbersAmount_k > 0) { int counter = 1; int numberOfPrimeNumber_n = 0; while (counter <= numbersAmount_k) { if (Int32.TryParse(Console.ReadLine(), out numberOfPrimeNumber_n) && numberOfPrimeNumber_n > 0 && numberOfPrimeNumber_n < PrimeNumbersList.Count) { SearchedPrimeNumbersIndexes.Add(numberOfPrimeNumber_n - 1); ++counter; } else { Console.WriteLine("Please enter valid number, n > 0 && n < " + PrimeNumbersList.Count); } } } else { Console.WriteLine("Please enter valid number, k > 0"); GetNumbersFromInput(); } } public void GetNumbersFromInputForTests(int numbersAmount_k) { int counter = 1; int numberOfPrimeNumber_n = 0; while (counter <= numbersAmount_k) { Console.WriteLine(numberOfPrimeNumber_n); SearchedPrimeNumbersIndexes.Add(numberOfPrimeNumber_n++); ++counter; Console.WriteLine(numberOfPrimeNumber_n); } Console.ReadKey(); } public void FindPrimesAndListInConsole() { foreach (var searchedIndex in SearchedPrimeNumbersIndexes) { Console.WriteLine(PrimeNumbersList[searchedIndex]); } } } } |
|
|