using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace test3prime { static class Extensions { public static bool isPrime(this int n) { if (n == 2) return true; var noPrime = true; for (var i = 2; i < n; i++) if (noPrime = (n % i == 0)) break; return !noPrime; } public static bool isNextPrime(this int n, int next) { if (!n.isPrime()||!next.isPrime()) throw new Exception("Один из аргументов не является простым."); if (n == next) return false; var notNext = false; for (var i = n + 1; i < next; i++) if (notNext = i.isPrime()) break; return !notNext; } public static int firstDivider(this int n) { if (n.isPrime()) throw new Exception("Поиск делителя имеет смысл выполнять только для сложных чисел. Это число простое."); var Divider = 0; for (Divider = 2; Divider < n; Divider++) if (n % Divider == 0) break; return Divider; } public static bool test3p(this int n) { if (n.isPrime()) { Console.WriteLine("тестируемое число - простое"); return false; } else { var result_message = "Число является произведением последовательных простых "; var stop = false; var success = true; var count = 1; while(!stop) { var d = n.firstDivider(); n /= d; //Console.WriteLine(); //Console.WriteLine("делитель " + d); //Console.WriteLine("делитель простой " + d.isPrime()); //Console.WriteLine("результат деления " + n); //Console.WriteLine("результат простой " + n.isPrime()); if (stop = n.isPrime()) { success &= d.isNextPrime(n); //Console.WriteLine("следующий делитель является последовательным простым " + success); } else { success &= d.isNextPrime(n.firstDivider()); //Console.WriteLine("результат деления является последовательным простым " + success); } result_message += d + "*"; if (++count > 3) // инкримент до сравнения { stop = true; success = false; } } if(success) result_message += n; else result_message = "НЕТ"; Console.WriteLine(); Console.WriteLine(result_message); } return true; } } }