【问题标题】: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;
}
【问题讨论】:
标签:
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】:
根据我收集的信息,您的方法不正确。
您应该从2 到max(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部分,它没有任何效果。