【问题标题】:Find the number of common factors for n numbers excluding "1" as common factor求除“1”为公因数的n个数的公因数个数
【发布时间】:2017-06-09 10:11:48
【问题描述】:

这是我用 gcc 编写的代码。不知道是我的逻辑不正确还是我犯了其他错误。每次输出都是0。

int main()
{
int n,a[20],count=0;
cin>>n;

for(int i=0;i<n;i++)
{
    cin>>a[i];
}

for(int k=0;k<n;k++)
{
    int c=0;
    for(int j=2;j<n;j++)
    {
        if(a[k]%j==0)
        {
            c++;
        }
        else
        {
            continue;
        }
    }
    if(c==n)
    {
      count++;
    }
}
cout<<count;
}

【问题讨论】:

  • else { continue; } 完全没用

标签: c++ algorithm number-theory


【解决方案1】:

您的循环顺序错误。您正在检查是否有任何数字的n 分隔符。

尝试交换循环。然后计数将是除以输入的数字的数量。

你也有错误的上限。您需要尽可能高的分隔线。

int max_divider = 2;
for (i = 0; i < n; i++) {
    if (a[i] > max_divider) 
    {
        // Naive approach
        max_divider = a[i];
    }
}
// For each number 2..max_divider
for(int j=2;j <= max_divider;j++)
{
    int c=0;
    for(int k=0;k<n;k++)
    {
        if(a[k]%j==0)
        {
            c++;
        }
        else
        {
            continue;
        }
    }
    if(c==n)
    {
      count++;
    }
}

【讨论】:

    【解决方案2】:

    根据我收集的信息,您的方法不正确。 您应该从2max(a)[1] 取每个数字,并检查它是否是a 中每个数字的因子/除数。如果是,您可以增加count


    [1] 甚至更好的 max(sqrt(a[i]) for a[i] in a) 伪代码语法。

    【讨论】:

      【解决方案3】:

      替换这个循环

      for(int j=2; j<n; j++)
      

      for(int j=2; (j < a[k]); j++)
      

      注意你可以去掉else部分,它没有任何效果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-06
        • 1970-01-01
        相关资源
        最近更新 更多