Advertisement

24.素数距离问题

阅读量:

描述

请提供一组数字,并设计一个算法来找出每个整数与其相邻最近的素数,并计算它们之间的距离长度。特别地,在存在等距情况时,请优先选择左侧的那个素数值及其对应的距离作为结果输出。

如果输入的整数本身就是素数,则输出该素数本身,距离输出0。

输入 第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000)

输出 每行输出两个整数 A B.
其中 A 代表离相应测试数据最近的素数,B 代表两者之间的距离.

样例输入

复制代码

样例输出

复制代码

0<M<1000000,因此需要筛法打表。

陷阱:M的界限是(0,1000000)但相邻素数不一定在这个范围内。

经计算得,所需的最后一个素数是1000003。

代码如下。

复制代码
 #include <stdio.h>

    
  
    
 int notPrime[1000004] = { 1, 1 };
    
  
    
 void init();
    
  
    
 int main() {
    
 	int n, distance;
    
 	init();
    
 	scanf("%d\n", &n);
    
 	while (n--) {
    
 		int now;
    
 		distance = 0;
    
 		scanf("%d\n", &now);
    
 		while (1) {
    
 			if (now - distance > 0 && !notPrime[now - distance])
    
 				break;
    
 			else if (now + distance < 1000004 && !notPrime[now + distance]) {
    
 				distance *= -1;
    
 				break;
    
 			}
    
 			distance++;
    
 		}
    
 		printf("%d %d\n", now - distance, distance > 0 ? distance : -distance);
    
 	}
    
 	return 0;
    
 }
    
  
    
 void init() {
    
 	int i, j;
    
 	for (i = 2; i < 1001; i++)
    
 		if (notPrime[i])
    
 			continue;
    
 		else
    
 			for (j = i * i; j < 1000004; j += i)
    
 				notPrime[j] = 1;
    
 }
    
    
    
    
    AI写代码

全部评论 (0)

还没有任何评论哟~