#include <bits/stdc++.h>
using namespace std;
long long shai(long long a)
{
if(a<2)
{
return 0;//小于2的0和1绝对不是,我被坑了2次。
}
for(int i=2;i<=sqrt(a);i++)
{
if(a%i==0)
{
return 0;//传进来的数已经有了除1和本身之外的数了,就绝对不是素数。
}
}
return 1;//跑遍了循环没找到除1和本身之外的数,那就是素数,返回1。
}
int main()
{
long long n;
cin>>n;
long long qwq[100001];
for(int i=1;i<=n;i++)
{
cin>>qwq[i];//输入数。
}
for(int i=1;i<=n;i++)
{
if(shai(qwq[i])==1) cout<<qwq[i]<<" ";//如果函数结果为1就输出这个数。
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
bool vis[100001]={1,1};//0,1标为不是
int n;
void Era(int qwq)
{
for(int i=2;i<=qwq;i++)
{
if(vis[i])
{
continue;
}//是合数就不执行
for(int j=i*2;j<=qwq;j+=i)//从i×2开始筛,因为进过判断后i为素数
{
vis[j]=true;//j=i的倍数,每次加i,即为i的倍数每次加1,p数组的第j个元素标为合数
}
}
}
int main()
{
cin>>n;
int tmp;
Era(100001);
for(int i=1;i<=n;i++)
{
scanf("%d",&tmp);
if(!vis[tmp])//已经记下了,判断一下即可
{
cout<<tmp<<" ";
}//真就不是,假就是
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
long long n,m;
bool vis[10000001]={1,1};//0,1均既不是素数,也不是和数,所以先标记为不是
int Prime[10000001],k;
void prime(long long n)
{
for(int i=2;i<=n;i++)//最小的素数是2
{
if(!vis[i])
{
Prime[++k]=i;//如果是素数就标记一下
}
for(int j=1;j<=k;j++)//j小于当前所有的素数的个数
{
if(Prime[j]*i>n)
{
break;
}
vis[Prime[j]*i]=true;//用素数依次×i,结果标记为合数
if(i%Prime[j]==0)
{
break;
}
}
}//欧拉筛法,就是拿当前的数×之前的筛出来的素数,这个数即为合数
}
int main()
{
cin>>n;
prime(100001);//在10的5次方范围内筛素数
for(int i=1;i<=n;i++)
{
int t;
cin>>t;
if(!vis[t])//上面标记过了,这时输入后直接判断就行了
{
cout<<t<<" ";
}
}
return 0;
}