OR127. 无倍数数
描述
小M得到了n个互不相同的正整数ai,在这n个数中,某个数称为无倍数数当且仅当其他的数都不是它的倍数。请你帮小M找出这n个数中所有的无倍数数,并以升序输出。
输入描述
第一行包含一个整数n。1≤n≤105
第二行包含n个互不相同的正整数Ai。1≤Ai≤107
输出描述
按升序输出所有的无倍数数,以空格分隔。示例1
输入:
3 8 4 12
输出:
8 12
C 解法, 执行用时: 56ms, 内存消耗: 28608KB, 提交时间: 2022-02-12
#include<stdio.h> const int maxn = 10000001; int data[maxn] = {0}; int main() { int n; scanf("%d",&n); int t; for(int i = 0;i < n;i++) { scanf("%d",&t); data[t]++; } for(int i = 1;i <= maxn / 2;i++) { if(data[i] == 1) { int j = 2 * i; do { if(data[j]) {data[i] = 0;break;} j += i; }while(j < maxn); } } for(int k = 1;k < maxn;k++) { if(data[k] == 1) printf("%d ",k); } return 0; }
C++ 解法, 执行用时: 582ms, 内存消耗: 760KB, 提交时间: 2022-02-11
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int i,j,sz,n; while(cin>>n) { int temp; vector<int> data,res; for(i=0;i<n;i++) { cin>>temp; if(temp>0) data.push_back(temp); } sz=data.size(); bool correct; for(i=0;i<sz;i++) { correct=true; for(j=0;correct&&(j<sz);j++) correct=((j==i)||(data[j]%data[i])); if(correct) res.push_back(data[i]); } int rsz=res.size(); if(rsz) { sort(res.begin(),res.end()); cout<<res[0]; for(i=1;i<rsz;i++) cout<<" "<<res[i]; } cout<<endl; } return 0; }