第一次写博客,以后努力做到每日更新!
问题:输入n个数,其中最大公约数不为“1”的最大个数。?
(如果没有的话 ,输出1)
用打表比较方便。
代码如下;
#include <stdio.h>
#include <string.h>
#define max(a,b)(a>b?a:b)
#define N 100005
int s[N];
int main(){
int n;
int k,m,i,j;
while((scanf("%d",&n))!=EOF)
{
memset(s,0,sizeof(s)); //归零
for( i=1;i<=n;i++)
{
scanf("%d",&k);
for(j=1;j*j<k;j++) // 不能j*j<=k 否则当j=k时 if (k%j==0) s[j] 就加了2!!
{
if(k % j == 0)
{
s[j]++;
s[k/j]++; //统计两个约数出现的次数
}
}
if(k==j*j) // 单独判断j*j = k的情况
s[j]++;
} // 此时是s[N] 统计出了所有因数出现的次数
int a=1;
for(i=2; i<=N; i++)
a=max(a,s[i]); // 找出不为1(i从2开始) 且次数最多的
printf("%d\n",a);
}
return 0;
}
// 给出n个数 其中最大公约数不为一的最大个数