Common Divisors CodeForces - 1203C

题意:

给你n个数,让你找出来公因子有多少个。公因子:对于这n个数,都能被这个公因子整除

 

题解:

只需要找出来这n个数的最大公因子x,然后找出来有多少不同数能把x给整。(因为我们可以保证x可以把这n个数整除,又因为x是最大公因数,那么能把x整除的数肯定也可以把这n个数整除)

 

代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<map>
 7 #include<vector>
 8 #include<math.h>
 9 #define mem(a,x) memset(a,x,sizeof(a))
10 using namespace std;
11 typedef long long ll;
12 const int maxn=1005;
13 const int mod=26;
14 const int INF=0x3f3f3f3f;
15 const int Times = 10;
16 const int N = 5500;
17 ll gcd(ll a,ll b)
18 {
19     return b?gcd(b,a%b):a;
20 }
21 ll v[400005];
22 int main()
23 {
24     ll n;
25     scanf("%I64d",&n);
26     ll ans,v;
27     scanf("%I64d",&ans);
28     n--;
29     while(n--)
30     {
31         scanf("%I64d",&v);
32         ans=gcd(ans,v);
33     }
34     ll s=0;
35     for(ll i=1; i<=sqrt(ans); i++)
36     {
37         if(ans%i==0)
38         {
39             if(ans/i==i)
40             {
41                 s--;
42             }
43             s+=2;
44         }
45     }
46     printf("%I64d\n",s);
47     return 0;
48 }

 

posted @ 2020-04-11 10:33  kongbursi  阅读(165)  评论(0编辑  收藏  举报