找出n个数字的公共因子数,不包括" 1"作为共同因素

时间:2017-06-09 10:11:49

标签: c++ algorithm number-theory

这是我用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;
}

3 个答案:

答案 0 :(得分:0)

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

伪代码语法中的

[1]甚至更好max(sqrt(a[i]) for a[i] in a)

答案 1 :(得分:0)

你的循环顺序错误了。您正在检查是否有任何数字的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 :(得分:0)

替换此循环

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

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

请注意,你可以摆脱else部分,它没有效果。