素数最短距离算法

简介:
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;

#define MAX_LENGTH 50000001

bool prime[MAX_LENGTH];

void CreatePrimeTable()
{
	int i, j;

	memset(prime, true, sizeof(prime)); // 初始化全为1
	prime[0] = prime[1] = false;  // 0和1不是素数

	for (i = 2; i * i < MAX_LENGTH; i++)
	{
		if (prime[i]) // 如果是素数
		{
			// 如果i是素数,那么能整除i的肯定不是素数
			for (j = i * 2; j < MAX_LENGTH; j += i)
			{
				prime[j] = false;
			}
		}
	}
}

int main()
{ 
	int number = 0;
	long prevDist = 0, // 当前素数与前一个素数的距离
		 nextDist = 0; // 当前素数与后一个素数的距离
	int i = 0, j = 0;

	CreatePrimeTable();

	while (scanf("%d", &number) != EOF)
	{
		prevDist = 0;
		nextDist = 0;
		if (prime[number]) // 如果是素数
		{
			printf("%d ", number);

			for (i = number - 1; i >= 2; i--)
			{
				if (prime[i] != 0)
				{
					prevDist = number - i;
					break;
				}
			}

			for (i = number + 1; i < MAX_LENGTH; i++)
			{
				if (prime[i] != 0)
				{
					nextDist = i - number;
					break;
				}
			}

			printf("%d\n", prevDist < nextDist ? prevDist : nextDist);
		}
		else
		{
			printf("%d不是素数\n", number);
		}
	}
	return 0;
}

目录
相关文章
|
算法
初阶OI素数算法——埃拉托尼斯筛
时间复杂度比较优秀且易于理解的素数筛选法
92 0
|
5月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
52 0
|
7月前
|
算法 Serverless 数据安全/隐私保护
RSA算法中,为什么需要的是两个素数?
PrimiHub是密码学专家团队开发的开源隐私计算平台,关注数据安全、密码学等领域。RSA算法使用两个素数确保安全,因为它们的乘积易于计算,但分解困难,形成加密基础。算法涉及选择大素数、计算乘积、生成公私钥对。加密时,消息通过公钥变形;解密则需私钥,安全性依赖于大数分解问题的复杂性。
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
|
存储 算法 Python
信息学奥赛 试除法:高效筛选素数的算法
本文介绍了在Python代码中如何使用试除法高效筛选素数。
147 0
|
8月前
|
机器学习/深度学习 存储 算法
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
111 0
|
算法
转:素数算法,看看电脑是怎么找素数的
素数算法主要应用于计算科学,密码学和数论等领域。例如,在密码学中,素数算法用于生成密钥;在数论中,素数算法用于研究质数分布。素数算法的历史可以追溯到公元前300年左右的古希腊数学家,他们发现了素数的重要性。随着数学和计算机科学的发展,素数算法也在不断改进和提高。
202 2
|
存储 分布式计算 算法
转:如何利用素数算法加强企业文档管理软件的效能和安全性
利用素数算法来加强企业文档管理软件的效能和安全性,可是个有趣的法子。这可不只是在电影里才看得到的情节,素数算法可以在好几个方面给软件的性能和安全性添点料。下面就来看看有哪些酷炫的方式吧——
97 0
|
人工智能 算法 C#
C语言经典算法实例2:数组求素数
C语言经典算法实例2:数组求素数
C语言经典算法实例2:数组求素数
|
算法 C++
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现
素数又称为质数,它指在一个大于1的自然数中,除了1和它自身外,没法被其他自然数整除的数。比1大,但不是素数的数称为合数。0和1既不是素数,也不是合数。因为素数的分布没有明显的规律,所以在程序中一般根据素数的定义来判断该数是否为素数。例如哥德巴赫猜想:哥德巴赫通过大量的数据猜测,所有不小于6的偶数,都可以表示为两个奇素数之和。后人将其称之为“1+1”。并且,对于每个不小于9的奇数,都可以表示为三个奇素数之和。
357 0
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现

热门文章

最新文章