Помогите мне улучшить мой код...
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Prime_digit_replacements { class Program { static void Main(string[] args) { Console.Write("Enter number of members of the family: "); int fn = int.Parse(Console.ReadLine()); int change = 1; if(fn > 6) { change = fn - 5; } int number = Convert.ToInt32(Math.Pow(10, change)); List<int> tprime = new List<int>(); int[] family = new int[fn]; int i = 0; int leng = number; int temp = 0; bool a = true; while (a) { number = MyMath.Here.NextPrime(number); i = 0; temp = number; family[i] = number; tprime.Clear(); while (temp.ToString().Length == number.ToString().Length) { tprime.Add(temp); temp = MyMath.Here.NextPrime(temp); } i++; int dis = 0; int temporary = number; foreach (int mun in tprime) { dis = number.ToString().Distinct().Count(); i = 1; temporary = number; family[0] = number; foreach (int tr in tprime) { if(number > tr) { continue; } if (tr.ToString().Distinct().Count() <= dis) { if (!family.Contains(tr) && number % 10 == tr %10) { if (Repeat(temporary, tr, change)) { family[i] = tr; i++; if (i == fn) { a = false; break; } } } } } if (!a) { break; } number = mun; } } foreach(int v in family) { Console.WriteLine(v); } } public static bool Repeat(int a, int b, int num) { int leng = Convert.ToInt32(Math.Floor(Math.Log10(a))) + 1; int[] aa = new int[leng]; int[] bb = new int[leng]; for(int i = 0; i < leng; i++) { aa[i] = a % 10; a /= 10; bb[i] = b % 10; b /= 10; } int j = 0; int[] repa = new int[num]; int[] repb = new int[num]; int y = 0; while (j < leng) { if(aa[j] != bb[j]) { if (y >= num) { return false; } repa[y] = aa[j]; repb[y] = bb[j]; y++; } j++; } if(y != num) { return false; } int tempa = repa[0]; int tempb = repb[0]; foreach(int tr in repa) { if(tr != tempa) { return false; } } foreach (int tr in repb) { if (tr != tempb) { return false; } } return true; } } }
Вот
Где mymath.Вот.NextPrime
public static int NextPrime(int lastprime) { int a = 0; if (IsPrime(lastprime)) { a = 2; } else { a = 1; } if(lastprime < 2) { return 2; } else if(lastprime == 2) { return 3; } lastprime += a; while (!IsPrime(lastprime)) { lastprime += a; } return lastprime; }
Как сделать это быстрее??
Что я уже пробовал:
Это медленно..
Пожалуйста, помогите мне улучшить его.
Patrice T
Что же должен делать этот код ?
PIEBALDconsult
https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
Patrice T
Это совет, чтобы использовать его ?
Member 13294470
Следующий Прайм очень быстрый