原題鏈結
1616 最小集合
基準時間限制:1 秒 空間限制:131072 kb 分值: 80
難度:5級演算法題
a君有乙個集合。
這個集合有個神奇的性質。
若x,y屬於該集合,那麼x與y的最大公因數也屬於該集合。
但是他忘了這個集合中原先有哪些數字。
不過幸運的是,他記起了其中n個數字。
當然,或許會因為過度緊張,他記起來的數字可能會重複。
他想還原原先的集合。
他知道這是不可能的……
現在他想知道的是,原先這個集合中至少存在多少數。
樣例解釋:
該集合中一定存在的是
input
第一行乙個數n(1<=n<=100000)。output第二行n個數,ai(1<=ai<=1000000,1<=i<=n)。表示a君記起來的數字。
輸入的數字可能重複。
輸出一行表示至少存在多少種不同的數字。input示例
5output示例1 3 4 6 6
5性質1:該集合中一定存在輸入的數字中若干數的最大公因數。
這個證明比較簡單,例如我們有 a1
,a2,
...,
an這些數,那麼 gc
d(a1
,a2)
一定存在該集合,然後 gc
d(a1
,a2,
a3)
也一定存在該集合,依次類推。
所以我們對於每個數i,都求出在n個數中有多少數是它的倍數,記為 f(
i) 。
然後觀察 f(
2×i)
,f(3
×i),
..,f
(x×i
),..
. 中是否存在乙個數等於 f(
i),若不存在,則i一定存在於該集合。
#include #define maxn 1000005
#define inf 1000000009
typedef long long ll;
using namespace std;
int d[maxn], p[maxn];
int main()
for(int i = 1; i <= maxs; i++)
for(int j = i; j <= maxs; j += i)
int ans = 0;
for(int i = 1; i <= maxs; i++)
} if(sign == 0)
ans++;
}printf("%d\n", ans);
return 0;
}
51nod 最小集合
最小集合 system message 命題人 基準時間限制 1 秒 空間限制 131072 kb 分值 80 a君有乙個集合。這個集合有個神奇的性質。若x,y屬於該集合,那麼x與y的最大公因數也屬於該集合。但是他忘了這個集合中原先有哪些數字。不過幸運的是,他記起了其中n個數字。當然,或許會因為過度...
EXT 最小集合
想把ext放入自己的專案,需要自己整理一下,因為發布包裡的東西並非都是必要的,比如文件,比如例子,比如源 必要的最小集合是這樣 ext all.js,adapter ext ext base.js,build locale ext lang zh cn.js和整個resources目錄。ext al...
BZOJ 4762 最小集合
定義乙個非空集合是合法的,當且僅當它滿足以下兩個條件。1 集合內所有元素and和為0 2 它的非空子集中僅有它本身滿足1 給出乙個集合s,求它的合法非空子集數。第一行乙個正整數n,表示 s 第二行n個非負整數ai,表示集合內的元素。n 1000,ai 1024 乙個整數,表示s的合法非空子集數。答案...