题目:
求一个数,能使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以内的所有素数
- 遍历素数表找出符合要求间隔的素数对
- 这里交换两个数的方式很新颖,两次异或同一数结果为原值。