D.Factor
题目描述
你有一个集合 ,和具有 个正整数的数组 . 最初,集合 为空(不包含任一元素)。你将按照以下方式填充集合 :
- 以此枚举数组 a 中的每个元素。
- 对于数组中的第 i 个元素 ,生成 的因子集合 。如果一个集合 被称为是 的因子集合,当且仅当 的每个因子都在集合 内,且集合 的每个元素都是 的因子。
请你求出集合 的大小,即 。
输入描述
第一行有一个正整数 。
第二行有 n 个正整数 。
输出描述
输出一个整数,表示集合 S 的大小。
样例
输入:
3
1 2 3输出:
3
思路:
类似于埃氏筛的思路,找这个数是不是给定的n个数的因子。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6+10;
int vis[N];
int main()
{
int n;
cin >> n;
for(int i = 0;i < n;i++){
int x;
cin >> x;
vis[x] = 1;
}
int ans = 0;
for(int i = 1;i <= 1e6;i++){
for(int j = i;j <= 1e6;j += i){
if(vis[j]){
ans++;
break;
}
}
}
cout << ans;
}