数组中任何子集的最大公约数属于给定的数组吗?

数组中任何子集的最大公约数属于给定的数组吗?

在这里我们会看到一个有趣的问题。有一个包含 N 个元素的集合。我们必须生成一个数组,使得该数组的任何子集的 GCD 都位于给定的元素集中。另一个限制是生成的数组不应超过 GCD 集合长度的三倍。例如,如果有 4 个数字 {2, 4, 6, 12},那么一个数组将是 {2, 2, 4, 2, 6, 2, 12}

要解决这个问题,我们必须首先对列表进行排序,然后如果 GCD 与给定集合的最小元素相同,则只需在每个元素之间放置 GCD 即可创建数组。否则无法形成数组。

算法

generateArray(arr, n)

Begin   answer := empty array   gcd := gcd of array arr   if gcd is same as the min element of arr, then      for each element e in arr, do         append gcd into answer         append e into answer      done      display answer   else      array cannot be formed   end ifEnd

登录后复制

示例

#include#include#includeusing namespace std;int gcd(int a, int b) {   if (a == 0)      return b;   return gcd(b % a, a);}int getGCDofArray(vector arr) {   int result = arr[0];   for (int i = 1; i  arr) {   vector answer;   int GCD_of_array = getGCDofArray(arr);   if(GCD_of_array == arr[0]) { //if gcd is same as minimum element      answer.push_back(arr[0]);      for(int i = 1; i  GCD(data, data + n);   vector arr;   set::iterator it;   for(it = GCD.begin(); it!= GCD.end(); ++it)      arr.push_back(*it);   generateArray(arr);}

登录后复制

输出

2 2 4 2 6 2 12

登录后复制

以上就是数组中任何子集的最大公约数属于给定的数组吗?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2584101.html

(0)
上一篇 2025年3月6日 14:43:59
下一篇 2025年2月26日 23:12:04

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论