N相关孪生素数
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Description
如果A和B都是素数,而且A和B相差n,那么A和B是相差n的孪生素数。
请编写程序根据输入的n,输出[L,R]范围内的相差N的孪生素数的对数。
例如:n=4,L=1,R=20,相差4的孪生素数有(3,7),(7,11),(13,17)共3对,则输出3。
注意:main函数已经给定(如下所示)。
请将程序补充完整。
提交时只需要提交自己补充的代码部分,不需要提交给定的main函数的代码部分。
#include<stdio.h>
int main()
{
int n,L,R,t;
while(scanf("%d%d%d",&n,&L,&R)!=EOF)
{
t=f(n,L,R);
printf("%d\n",t);
}
return 0;
}
Input
包含多组测试数据,每组测试数据占一行,每行3个正整数,分别代表n,L和R。其中n大于1,L大于1,R小于10000,L小于R。
Output
每组测试数据输出占一行,每行输出1个整数。
Sample Input
4 2 20
Sample Output
3
题目分析:
这题本来很简单的。。但我居然爆了一次T,所以我决定还是写下来……
判断两次质数就会爆T,但是加上break就好了。
以下给出的是错误代码,正确代码要在判断质数的时候加上两个break,就可以680MS过题~
当然,最保险的办法是定义一个数组 a[10001] ,用数组的数值为 0 或者 1 来记录这个数是否为质数。
最后:抄代码是不对的啦~
#include<stdio.h>
int f(int n,int l,int r)
{
int i,j,sum=0,f;
for(i=l;i<=r-n;i++)
{
f=0;
for(j=2;j<i;j++)
{
if(i%j==0)
{
f=1;
break;
}
}
for(j=2;j<i+n;j++)
{
if((i+n)%j==0)
{
f=1;
break;
}
}
if(f==0)
sum++;
}
return sum;
}
int main()
{
int n,L,R,t;
while(scanf("%d%d%d",&n,&L,&R)!=EOF)
{
t=f(n,L,R);
printf("%d\n",t);
}
return 0;
}