程序设计:找质数
解题思路
嗯,,超时让人头疼
scanf 和 printf 确实比 cin 和 cout 快(有木有大佬可以给小弟解释一下这是为什么)
- 先把题中数模约定中的所有素数标记出来,标记过程,需要优化,否则就会超时
- 从2到1000002的所有数,遍历,每一个数的倍数全部标记为0;代表不是素数。
- 因为要所有字典序中最小的,所以遍历从2到所求数的一半(这两个数肯定只有一个小于数1/2)
- 如果遍历的 j 和 n-j 都是素数,就输出,
完整代码
#include <bits/stdc++.h>
using namespace std;
int su[1000002];
void init()
{
int n=0;
int j;
for(int k=0;k<1000002;k++)
su[k]=1;
for(int i=2;i<1000002;i++)
{
if(su[i]==1)
{
for(j=i+i;j<=1000002;j=j+i)
{
su[j]=0;
}
}
}
}
int main()
{
init();
int N;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
int n;
scanf("%d",&n);
for(int j=2;j<=n/2;j++)
{
if(su[j]==1 && su[n-j]==1)
{
printf("%d %d\n",j,n-j);
break;
}
}
}
}