孪生素数加强版 1111111

现在给你n,k,想知道有多少对不超过n的素数,它们的差不超过k。也就是说有多少对(p,q),满足p,q都是素数,并且1≤p<q≤n且q≤p+k。

输入格式
第一行两个整数n,k。

输出格式
一行一个整数,表示答案。

样例输入1
10 2
样例输出1
3

样例输入2
1000 50

样例输出2
1337

样例输入3
967400 911694

样例输出3
2888073728

时间限制:2s

空间限制:1GB

记录前后两个是数,相减与k比较

你题目的解答代码如下:

#include <stdio.h>
int isprime( int n);
int main()
{
    int sum = 0;
    int a[1000];
    int n,k,i,j,t=0;
    scanf("%d%d",&n,&k);
    for( i=2; i<=n; i++ ) {
        if(isprime(i)){
            for( j=0; j<t; j++ ) {
                if (i-a[j]<=k)
                    sum++;
            }
            a[t++] = i;
        }
    }
    printf("%d", sum);
    return 0;
}
int isprime(int n)
{
    int i;
    if(n<=3) return n>1;
    for(i=2;i*i<=n;i++)
        if(n%i==0) return 0;
    return 1;
}

img

如有帮助,望采纳!谢谢!

#include <stdio.h>
int isprime(int n)
{
    for(int i=2;i*i<=n;i++)
        if(n%i==0)
            return 0;
    return 1;
}
int main()
{
    int a[10000];
    int n,k,count=0,num=0;
    scanf("%d%d",&n,&k);
    for(int i=2;i<=n;i++)
        if(isprime(i))
            a[count++] = i;
    for(int i=0;i<count-1;i++)
    {
        for(int j=i+1;j<count;j++)
        {
            if(a[j] - a[i] <= k)
                num++;
            else 
                break;
        }
    }
    printf("%d\n",num);
    return 0;
}