Bir sorum var. örneğin,En yaygın ortak bölüme göre sıralama dizisi
bool cmp(int a, int b)
{
return __gcd(a, b) > 1;
}
ve: Bu karşılaştırıcı yazmak
Ben bu sayıları varsa:
2 5 6 7 8 12 15 19 20
kodum çıkışları:
20 15 12 8 6 2 5 7 19
tamam ..
ancak örnek olarak:
1 2 3 4 5 6 7 8 9
benim kod çıkışları
1 2 3 4 5 6 7 8 9
Bunu nasıl yapabilirim? sonuçları bilinemez bu yüzden,
9 6 3 (...)
'dan geçirmiyor Muhtemelen 'std :: kullanıyorsunuz rt'? Bu işe yaramaz. 'std :: sort', normal sayılar gibi sıralamak gerektiği anlamına gelen [* sıkı zayıf sipariş *] (https://www.sgi.com/tech/stl/StrictWeakOrdering.html) gerektirir. Örneğin. '3 <4', yani' (4 <3) '. Ama 'gcd' * değişmez * gcd (a, b) == gcd (b, a)' - her iki durumda da aynı şekilde çalışır, bu nedenle (ve diğerleri), 'cmp' yapamazsınız sıralama için duyu. Olduğu gibi, hangi düzeye ulaşmaya çalıştığınızdan emin değilim. – BoBTFish
Peki, nasıl sıralayabilirim? – JanKo
Dürüst olmak gerekirse, hangi düzene ulaşmaya çalıştığınızdan emin değilim. Bir elemanın diğerinden “daha büyük” olduğu zaman, önemsiz olmayan bir gcd'ye sahip olsaydı, bir elemanın diğerinden “daha büyük” olmasının mantıklı olduğunu göremiyorum. Bu bir programlama hatası değil, matematik hatası. Gerçekten ne istediğini düşün. Aslında mantıklı mı? – BoBTFish