Jeśli nie chcesz mieć powtórzeń, to możesz dodawać możliwe pierwiastki wielomianu do zbioru:
Kopiuj
var candidateSet = new HashSet<int>();
// ...
candidateSet.Add(candidate);
Jeśli masz listę z pierwiastkami, to wpisując w Google c# list remove duplicates po minucie załapiesz, że możesz zrobić coś takiego:
Kopiuj
var candidates = new List<int> { 3, 3, 3, 2, 2, 1 };
var candidatesWithoutDuplicates = candidates.Distinct().OrderBy(_ => _).ToList(); // 1, 2, 3
A, dla jasności. To, co robisz, działa tylko dla wielomianów o WSZYSTKICH współczynnikach całkowitych. Jeśli ktoś poda x^2+10x-11, to dostanie pierwiastki wymierne { -11, 1 }. Ale jeśli ktoś podzieli ten wielomian przez 100 i poda 0.01x^2+0.1x-0.11, to nie dostanie żadnych pierwiastków wymiernych, mimo że pierwiastki wymierne są, bo pomnożenie wielomianu przez liczbę (!=0) nie zmienia jego pierwiastków. W takiej sytuacji należałoby znaleźć współczynnik mający najwięcej liczb po przecinku. Jeśli będzie to k miejsc, to pomnożyć wszystkie współczynniki przez 10^k. Np. w przykładzie wyżej mnożylibyśmy przez 10^2 = 100. Możesz poczytać: https://stackoverflow.com/questions/9386672/finding-the-number-of-places-after-the-decimal-point-of-a-double Albo po prostu upewnić się, że współczynniki są całkowite.