using System;
using System.Collections.Generic;
namespace Answer {
class Program {
static void Main() {
var n = InputUInt32("Введите целое положительное число: ");
var list = Primes(n);
foreach (var x in list) Console.Write($"{x} ");
Console.WriteLine();
Console.ReadKey();
}
static List Primes(uint n) {
var list = new List();
for (var x = 2U; x <= n; ++x) if (IsPrime(x)) list.Add(x);
return list;
}
static bool IsPrime(uint num) {
bool prime;
if (num < 2) return false;
else if (num <= 5 && (num == 2 || num == 3 || num == 5)) prime = true;
else if (0 == num % 2 || 0 == num % 3 || 0 == num % 5) prime = false;
else {
uint n;
for (n = 3; n * n <= num && 0 != num % n; n += 2) {; }
prime = n * n > num;
}
return prime;
}
static uint InputUInt32(string msg) {
uint value;
do Console.Write(msg); while (!uint.TryParse(Console.ReadLine(), out value));
return value;
}
}
}
C#
Учитывая целое число n (n>2), напишите метод, который возвращает простые числа из диапазона [2, n].
Дарю решето Эратосфена, развлекайся:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Eratos
{
class Eratosfenum
{
private HashSet< uint> PrimeNumbers;
public HashSet< uint> Primes {get => PrimeNumbers};
private uint InitializedWith;
private void Init(uint _maxNumber)
{
uint[] EratosTemp = new uint[_maxNumber >> 1];
uint k = 3;
for (uint i = 0; i < EratosTemp.Length; i++)
{
EratosTemp[i] = k;
k += 2;
}
for (uint i = 0; i < EratosTemp.Length - 1; i++)
{
if (EratosTemp[i] == 0)
continue;
for (uint j = i + EratosTemp[i]; j < EratosTemp.Length; j += EratosTemp[i])
EratosTemp[j] = 0;
}
PrimeNumbers = (from x in EratosTemp where x != 0 select x).ToHashSet();
PrimeNumbers.Add(2);
}
public Eratosfenum(uint _maxNumber)
{
InitializedWith = _maxNumber;
Init(_maxNumber);
}
public IEnumerable Primes
{
get { return PrimeNumbers; }
}
public bool IsPrime(uint _test)
{
if (_test > InitializedWith)
throw new Exception("The test number is too large");
return PrimeNumbers.Contains(_test);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Eratos
{
class Eratosfenum
{
private HashSet< uint> PrimeNumbers;
public HashSet< uint> Primes {get => PrimeNumbers};
private uint InitializedWith;
private void Init(uint _maxNumber)
{
uint[] EratosTemp = new uint[_maxNumber >> 1];
uint k = 3;
for (uint i = 0; i < EratosTemp.Length; i++)
{
EratosTemp[i] = k;
k += 2;
}
for (uint i = 0; i < EratosTemp.Length - 1; i++)
{
if (EratosTemp[i] == 0)
continue;
for (uint j = i + EratosTemp[i]; j < EratosTemp.Length; j += EratosTemp[i])
EratosTemp[j] = 0;
}
PrimeNumbers = (from x in EratosTemp where x != 0 select x).ToHashSet();
PrimeNumbers.Add(2);
}
public Eratosfenum(uint _maxNumber)
{
InitializedWith = _maxNumber;
Init(_maxNumber);
}
public IEnumerable Primes
{
get { return PrimeNumbers; }
}
public bool IsPrime(uint _test)
{
if (_test > InitializedWith)
throw new Exception("The test number is too large");
return PrimeNumbers.Contains(_test);
}
}
}
есть такое
я знаю метод, который возвращает реализации поиска простых чисел на С#, примерно 77 300 за 0,40 сек.
называется гугль, поиск по запросу "простые числа C#"
называется гугль, поиск по запросу "простые числа C#"
Написал
Андрей Доманов
куда?
Похожие вопросы
- На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом
- С # Дан двумерный массив целых чисел размером m*n. Заполнить его с клавиатуры.
- Задайте значения M и N. Напишите программу, которая найдёт сумму натуральных элементов в промежутке от M до N.,
- Программирование на C# - целые числа
- Найти два неотрицательных вещественных числа a и b, такие что a+b=d и a⋅b=d.
- C#: Умножения чисел(чисел в строках) больших Int64 MaxValue без использования System.Numerics и BigInteger
- Задание. В классе Program напишите следующие методы и вызовите их в главном методе Main:
- C#. Как сгенерировать случайное число в диапозоне, исключающее одно число. C#
- [c#] как найти все простые делители числа, ответ в массиве int
- Программа для сложения, вычитания, умножения и деления чисел в двоичной, восьмеричной, шестнадцатеричной системах