题目链接:http://www.patest.cn/contests/mooc-ds2015spring/00-%E8%87%AA%E6%B5%8B2
题意:
判断在不超过给定数的范围内,有多少对素数对。因为看着时间只有400ms,代码写得有些投机取巧,速度倒是快了不少。
代码:
#include <cstdio>
#include <iostream>
#include <string.h>
using namespace std;
bool is_prime(int a)//不是通用的素数判断,a从5开始,且a只为奇数
{
bool ans=true;
for(int i=3;i*i<=a;i+=2)
{
if(a%i==0)
{
ans=false;
break;
}
}
return ans;
}
int main()
{
bool flag[100005];
int n;
scanf("%d",&n);
memset(flag,0,sizeof(flag));
for(int i=5;i<=n;i+=2)
{
if(is_prime(i))
flag[i]=1;
}
flag[1]=0;
flag[3]=1;
if(n<=4)printf("0\n");
else
{
int cnt=0;
for(int i=3;i<=n-2;i+=2)
{
if(flag[i]&&flag[i+2])
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}
总结:
因为是一组样例跑一次,模式和CF类似,根据样例给分,还是很人性化的!