5725. 序列中不同最大公约数的数目 ###K //K

题目链接:https://leetcode-cn.com/problems/number-of-different-subsequences-gcds/

思路: 枚举gcd i  去找所有出现在数组中的i的倍数  只有数组中所有i的倍数的gcd 为i时

才存在一个序列的gcd为 i , 因为如果某个序列中的gcd已经为i了 那么再和i 的倍数取一遍 gcd

答案还是i

 1 class Solution {
 2     int vis[200010];
 3 public:
 4     int countDifferentSubsequenceGCDs(vector<int>& nums) {
 5         for(auto &v:nums) vis[v]=1;
 6         int ans=0;
 7         for(int i=1;i<=200000;i++)
 8         {
 9             int f=0;
10             for(int j=i;j<=200000;j+=i)
11             {
12                 if(vis[j])
13                 {
14                     if(!f) f=j;
15                     else
16                     {
17                         f=__gcd(f,j);
18                     }
19                 }
20             }
21             if(f==i) ans++;
22         }
23         return ans;
24     }
25 };
View Code

 

posted @ 2021-04-04 15:39  canwinfor  阅读(97)  评论(0编辑  收藏  举报