标签:素数 无法 def efi clu break pre while 多少
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 200005 4 vector<int>v,ans[N]; 5 int E,t,n,p[N],mn[N],vis[N],bl[N]; 6 int main(){ 7 for(int i=2;i<N-4;i++){ 8 if (!vis[i]){ 9 p[++p[0]]=i; 10 mn[i]=i; 11 } 12 for(int j=1;(j<=p[0])&&(i*p[j]<N-4);j++){ 13 vis[i*p[j]]=1; 14 mn[i*p[j]]=p[j]; 15 if (i%p[j]==0)break; 16 } 17 } 18 scanf("%d",&t); 19 while (t--){ 20 scanf("%d",&n); 21 for(int i=1;i<=n;i++)vis[i]=0; 22 for(int i=2;i<=n;i++){ 23 vis[mn[i]]++; 24 bl[i]=mn[i]; 25 } 26 for(int i=1;(i<=p[0])&&(p[i]<=n);i++) 27 if ((vis[p[i]]&1)&&(p[i]<=n/2))bl[2*p[i]]=p[i]; 28 for(int i=1;i<=n;i++)ans[i].clear(); 29 for(int i=2;i<=n;i++)ans[bl[i]].push_back(i); 30 int sum=0; 31 for(int i=2;i<=n;i++)sum+=ans[i].size()/2; 32 printf("%d\n",sum); 33 for(int i=1;(i<=p[0])&&(p[i]<=n);i++) 34 for(int j=0;j+1<ans[p[i]].size();j+=2)printf("%d %d\n",ans[p[i]][j],ans[p[i]][j+1]); 35 } 36 }
[nowcoder5669H]Harder Gcd Problem
标签:素数 无法 def efi clu break pre while 多少
原文地址:https://www.cnblogs.com/PYWBKTDA/p/13353923.html