HDU3823

题目:
求一个数,能使a,b与之相加后,成为素数,并且a与b之间没有其他的素数。

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<memory.h>


const int MAX_VALUE = 2e7;
static int primes[MAX_VALUE];
static char is_prime[MAX_VALUE+1];

int createPrimeTable()
{
    int size=0;
    memset(is_prime,1,sizeof(is_prime));
    int s= sqrt((double)MAX_VALUE)+1;

    for(int i=2;i<=s;i++)
    {
        if(is_prime[i])
        {
            for(int j=2;j<MAX_VALUE/i;j++)
            {
                is_prime[i*j] =0;

            }
        }
    }
    for(int i=2;i<=MAX_VALUE;i++)
    {
        if(is_prime[i])
            primes[size++] = i;
        
    }
    is_prime[0]=is_prime[1] =0;
    return size;
}

int main()
{
    int count;
    scanf("%d",&count);
    int size = createPrimeTable();
    int case_number = 1;
    while (count--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        if(a>b)
        {
            a= a^b;b=a^b;a=a^b;
        }
        int prime=1-2;
        for(int i=0;i<size-1;i++)
        {
            if(primes[i]>=a && primes[i+1]>=b)
            {
                if((primes[i]-a)==(primes[i+1]-b))
                {

                    prime = primes[i]-a;
                    break;
                }
            }
        }
        printf("Case %d:%d\n",case_number++,prime);
    }
    return 0;

}
  • 直接找出2e7以内的所有素数
  • 遍历素数表找出符合要求间隔的素数对
  • 这里交换两个数的方式很新颖,两次异或同一数结果为原值。

参考:https://mp.weixin.qq.com/s/qsOYvygfPdDWt2qc28CSwA

发布了57 篇原创文章 · 获赞 4 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_38258767/article/details/104540053
hdu