日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

上海计算机协会竞赛平台——整除

發(fā)布時(shí)間:2025/3/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 上海计算机协会竞赛平台——整除 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

?給定?n?個(gè)數(shù)字構(gòu)成的一個(gè)多重集合:請(qǐng)求出,其中有多少元素不能被任意一個(gè)在集合中的其他元素整除?

?

無(wú)法通過(guò)的做法

int main() {int n;cin >> n;int* num = new int[n];for (int i = 0; i < n; i++) {cin >> num[i];}int count = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (i != j) {if (num[i] % num[j] == 0) {count++;break;}}}}cout << n - count;return 0; }

不難看出,這種做法的時(shí)間復(fù)雜度太高了?

正確的做法

利用?埃式篩法 來(lái)做,埃式篩法原本是用來(lái)在自然數(shù)中尋找素?cái)?shù)的,檢查數(shù)字n是否為素?cái)?shù)大體這么做:做一個(gè)標(biāo)記數(shù)組,如果n沒(méi)有被標(biāo)記過(guò),說(shuō)明它是質(zhì)數(shù),這時(shí)把的倍數(shù)全部標(biāo)記。否則它是合數(shù)。

我們先把數(shù)字排序,再做一次埃式篩法就行了。

例如,對(duì)于例子中的數(shù)組中,出現(xiàn)了3,那么認(rèn)為 6,9,12,15……999999 等數(shù)可以被標(biāo)記為不符合要求的數(shù),但3自己是符合要求的。


建立bool數(shù)組:
bool bs[1000010];
該數(shù)組表示對(duì)應(yīng)下標(biāo)的數(shù)是否在輸入的一系列數(shù)中存在除該數(shù)本身之外的因數(shù),如果存在,說(shuō)明能被整除。
然后每次輸入a時(shí),都將從2*a到1000000的所有a的倍數(shù)的下標(biāo)設(shè)為true,最后統(tǒng)計(jì)數(shù)組中對(duì)應(yīng)下標(biāo)的元素在集合中且為false的元素的個(gè)數(shù)即可。
但要注意本題的數(shù)字可能重復(fù),一旦重復(fù),則所有相同的數(shù)都不滿足不能被整除的條件了。所以建立另一個(gè)數(shù)組表示某元素是否存在:
bool ea[1000010];
在輸入a后,如果ea[a]為false,則說(shuō)明a尚不存在,將其設(shè)為true并執(zhí)行將a的倍數(shù)設(shè)置的操作;如果ea[a]存在,則將bs[a]直接設(shè)為true。
?

解題代碼

#include<iostream> using namespace std; bool bs[1000010]; bool ea[1000010];int main() {int n;cin >> n;for (int i = 1; i <= n; i++) {int a;cin >> a;if (!ea[a]) {ea[a] = true;}else {bs[a] = true;}for (int j = a + a; j <= 1000000; j += a) {bs[j] = true;}}int ans = 0;for (int i = 1; i <= 1000000; i++) {if (!ea[i]) continue;ans += !bs[i];}cout << ans;return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的上海计算机协会竞赛平台——整除的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。