using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Program { class Feladat3 { static void Feladat_3() { List<int> primes = new List<int>(); for (int i = 1000; i < 10000; i++) { if (IsPrime(i)) { primes.Add(i); string result = string.Join("", GetSortedDigits(i)); Console.WriteLine($"({i},{result}),"); } } List<int[]> primesWithDecimalValuesOrdered = new List<int[]>(); foreach (int i in primes) { primesWithDecimalValuesOrdered.Add(GetSortedDigits(i)); } var keyValuePairs = primesWithDecimalValuesOrdered .GroupBy(x => x, new IntArrayComparer()) .Select(g => new KeyValuePair<int[], int>(g.Key, g.Count())) .Where(kvp => kvp.Value >= 6) .ToList().Count(); // Print the key-value pairs /* foreach (var kvp in keyValuePairs) { Console.WriteLine($"Key: {string.Join("", kvp.Key)}, Value: {kvp.Value}"); } */ Console.WriteLine(keyValuePairs); int[] digits = { 0, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9 }; int length = 4; PermutationGenerator generator = new PermutationGenerator(); generator.GeneratePermutations(digits, length); //generator.PrintGroupedPermutations(); // Get groups with at least 6 primes var groupsWithAtLeast6Primes = generator.GroupedPermutations .Where(group => group.Value.Count(permutation => IsPrime(int.Parse(string.Join("", permutation)))) >= 6) .ToList(); // Print the groups with at least 6 primes foreach (var group in groupsWithAtLeast6Primes) { Console.WriteLine($"Group: {group.Key}"); foreach (var permutation in group.Value) { Console.WriteLine(string.Join("", permutation)); } Console.WriteLine(); } } static int[] GetSortedDigits(int number) { // Convert the number to a string to access each digit string numberString = number.ToString(); // Convert each character to an integer int[] digits = numberString.Select(c => int.Parse(c.ToString())).ToArray(); // Sort the array of integers Array.Sort(digits); return digits; } static bool IsPrime(int number) { if (number <= 1) return false; if (number == 2) return true; if (number % 2 == 0) return false; int boundary = (int)Math.Floor(Math.Sqrt(number)); for (int i = 3; i <= boundary; i += 2) { if (number % i == 0) return false; } return true; } } class IntArrayComparer : IEqualityComparer<int[]> { public bool Equals(int[] x, int[] y) { if (x == null || y == null) return false; if (x.Length != y.Length) return false; for (int i = 0; i < x.Length; i++) { if (x[i] != y[i]) return false; } return true; } public int GetHashCode(int[] obj) { if (obj == null) return 0; int hash = 17; foreach (int i in obj) { hash = hash * 31 + i; } return hash; } } }