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;
}