基于最大公共分区

时间:2016-03-19 10:31:37

标签: c++ algorithm

我有一个问题。我写这个比较器:

bool cmp(int a, int b)
{
   return __gcd(a, b) > 1;
}

,例如:

如果我有这些数字:

2 5 6 7 8 12 15 19 20

我的代码输出:

20 15 12 8 6 2 5 7 19

没关系..

但是例如:

1 2 3 4 5 6 7 8 9

我的代码输出

1 2 3 4 5 6 7 8 9

我该怎么做?

这个序列应该是这样的:

9 6 3 (...)

1 个答案:

答案 0 :(得分:2)

您的比较器未建立strict weak ordering,因此结果未定义。

要制作合适的比较器,必须确保以下情况属实:

public async void registerpushid(string id, string platform, string handle) { try { RegistrationDescription registration = null; switch (platform.ToLower()) { case "mpns": registration = new MpnsRegistrationDescription(handle); break; case "wns": registration = new WindowsRegistrationDescription(handle); break; case "apns": registration = new AppleRegistrationDescription(handle); break; case "gcm": registration = new GcmRegistrationDescription(handle); break; } registration.RegistrationId = id; registration.Tags = new HashSet<string>(); registration.Tags.Add(handle); registration.Tags.Add("yourcustometag"); try { await hub.CreateOrUpdateRegistrationAsync(registration); } catch (MessagingException e) { } } catch (Exception ex) { } - 您的比较器未通过cmp(a, a) == false

的测试

cmp(2, 2) - 您的比较器未通过cmp(a, b) == true → cmp(b, a) == false

的测试

cmp(2, 4) - 您的比较器未通过cmp(a, b) == true and cmp(b, c) == true → cmp(a, c) == true

的测试