Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于最大公分的排序序列_C++_Algorithm - Fatal编程技术网

C++ 基于最大公分的排序序列

C++ 基于最大公分的排序序列,c++,algorithm,C++,Algorithm,我有个问题。我写下这个比较器: bool cmp(int a, int b) { return __gcd(a, b) > 1; } 例如: 1 2 3 4 5 6 7 8 9 如果我有这些数字: 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 (...) 您的比较

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

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

1 2 3 4 5 6 7 8 9
如果我有这些数字:

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 (...)

您的比较器未建立,因此结果未定义

要使用正确的比较器,您必须确保以下内容正确:

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

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


cmp(a,b)==true和cmp(b,c)==true→ cmp(a,c)=true
-您的比较器未通过对
cmp(2,6)和cmp(6,3)的测试

您的比较器未建立,因此结果未定义

要使用正确的比较器,您必须确保以下内容正确:

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

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


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

您可能正在使用
std::sort
?这不行<代码>标准::排序需要,这基本上意味着它必须像普通数字一样排序。例如,
3老实说,我不知道你想达到什么样的目的。我看不出一个元素比另一个元素“大”是有意义的,如果它们有非平凡的gcd,当两者都比对方“大”时。这不是一个编程错误,这是一个数学错误。想想你真正想要什么。它真的有意义吗?大概您使用的是
std::sort
?这不行<代码>标准::排序
需要,这基本上意味着它必须像普通数字一样排序。例如,
3老实说,我不知道你想达到什么样的目的。我看不出一个元素比另一个元素“大”是有意义的,如果它们有非平凡的gcd,当两者都比对方“大”时。这不是一个编程错误,这是一个数学错误。想想你真正想要什么。这真的有意义吗?@JanKo你需要再考虑一下你的排序标准。为什么排序序列应该以
9,6,3
开头?为什么不
8,4,2
?为什么不使用
3,6,9
6,3,9
或其他3种组合?排序后数字
2,4
应按什么顺序排列?为什么?你会发现,有一个公约数不足以建立明确的顺序,你将被迫给出额外的标准。真理是无关紧要的。创建一个序列,重要的是建立在gcd@JanKo听起来像。也许你不需要排序,但需要一些聚类算法来代替?我不知道为什么没有排序我怎么能做到这一点。@JanKo你需要再次考虑你的排序标准。为什么排序序列应该以
9,6,3
开头?为什么不
8,4,2
?为什么不使用
3,6,9
6,3,9
或其他3种组合?排序后数字
2,4
应按什么顺序排列?为什么?你会发现,有一个公约数不足以建立明确的顺序,你将被迫给出额外的标准。真理是无关紧要的。创建一个序列,重要的是建立在gcd@JanKo听起来像。也许你不需要排序,但需要一些聚类算法来代替?我不知道为什么没有排序我可以做到这一点。。