LINQ ile asal çarpanların bulunması
Daha önceden asal sayıların bulunması ile ilgili bir yazı hazırlamıştım.
Bu yazıda asal sayıların bulunması yöntemini kullanarak, asal çarpanların bulunmasını göstereceğim:
Az laf çok kod:
public static IEnumerable<int> AsalSayilar()
{
var ints = Enumerable.Range(2, Int32.MaxValue - 1);
return ints.Where(x => !ints
.TakeWhile(y => y < x)
.Any(y => x % y == 0));
}
public static IEnumerable<int> CarpanlariAl(int input)
{
int first = AsalSayilar()
.TakeWhile(x => x <= Math.Sqrt(input))
.FirstOrDefault(x => input % x == 0);
return first == 0
? new[] { input }
: new[] { first }.Concat(CarpanlariAl(input / first));
}
static void Main(string[] args)
{
bool ok = true;
int sayi = 0;
while (ok)
{
Console.WriteLine("Asal çarpanları bulunacak sayıyı giriniz, Çıkış için: Enter.");
string str = Console.ReadLine();
ok = int.TryParse(str, out sayi);
if (string.IsNullOrEmpty(str)) return;
var carpanlar = CarpanlariAl(sayi);
carpanlar.ToList().ForEach(Console.WriteLine);
}
}
Bu da programın çıktısı:

#asal #çarpan #primes #linq