算法练习题26——等差素数数列 (2017年蓝桥杯试题B)

devtools/2024/9/25 1:11:26/

题目描述

我们知道,素数是只能被1和它自身整除的正整数,比如:2, 3, 5, 7, 11, 13, 17, 19, 23, 29 等。

类似地,如果一个数列中的所有元素都是素数,并且这些素数构成了一个等差数列(即公差相等),这样的数列称为等差素数数列。比如,数列:7, 37, 67, 97, 127, 157 就是一个等差素数数列,它的公差为 30,长度为 6。

2004年,数学家格林与陶哲轩证明了任意长度的等差素数数列是存在的,这是数论中的一项重大成果。

现在,你的任务是编写一个程序,找出长度为10的等差素数数列,并且这个数列的公差最小。你需要输出该等差数列的公差值。

输出:

你需要输出一个整数,这个整数是长度为10的等差素数数列的最小公差

注意

        输出只有一个整数,不能包含其他多余的说明或内容。

示例:

题目给出的答案参考:

210

代码示例

c++

#include<bits/stdc++.h>
using namespace std;const int N = 10000;  // 素数查找的上限范围// 判断一个数是否是素数的函数
bool isPrime(int n) {if (n <= 1) return false;  // 1 和更小的数不是素数if (n == 2) return true;   // 2 是素数if (n % 2 == 0) return false;  // 偶数不是素数(除了2)// 检查从 3 到 sqrt(n) 的所有奇数,是否有能整除 n 的数for (int i = 3; i <= sqrt(n); i += 2) {if (n % i == 0) {return false;  // 有其他数能整除,n 不是素数}}return true;  // 如果没有找到任何能整除的数,n 是素数
}// 判断从 n 开始,公差为 cha 的等差数列中的 10 个数是否都是素数
bool ok(int n, int cha) {for (int i = 0; i < 10; i++) {  // 等差数列长度为 10if (!isPrime(n + i * cha)) {  // 检查 n + i * cha 是否是素数return false;  // 如果有一个不是素数,则返回 false}}return true;  // 如果 10 个数全是素数,返回 true
}int main() {// 不断增大公差 cha,从 2 开始,寻找符合条件的最小公差for (int cha = 2;; cha++) {  // 无限循环,从小的公差开始for (int i = 2; i < N; i++) {  // 遍历从 2 到 N 的每个数 i,尝试作为等差数列的起始点if (ok(i, cha)) {  // 如果从 i 开始,公差为 cha 的 10 个数都是素数cout << cha << endl;  // 输出找到的最小公差return 0;  // 结束程序}}}return 0;
}

java

import java.util.*;public class Main {// 判断一个数是否是素数public static boolean isPrime(int n) {if (n <= 1) return false;  // 1 和小于1的数不是素数if (n == 2) return true;   // 2 是素数if (n % 2 == 0) return false;  // 偶数不是素数(2除外)// 检查从 3 到 sqrt(n) 的所有奇数是否能整除 nfor (int i = 3; i <= Math.sqrt(n); i += 2) {if (n % i == 0) {return false;  // 如果找到能整除的数,n 不是素数}}return true;  // 如果没有找到任何能整除的数,n 是素数}// 判断从 n 开始,公差为 cha 的等差数列中的 10 个数是否都是素数public static boolean ok(int n, int cha) {for (int i = 0; i < 10; i++) {  // 检查等差数列长度为 10if (!isPrime(n + i * cha)) {  // 检查每个 n + i * cha 是否是素数return false;  // 如果有一个数不是素数,返回 false}}return true;  // 如果 10 个数全是素数,返回 true}public static void main(String[] args) {int N = 10000;  // 素数查找的上限范围// 不断增大公差 cha,从 2 开始,寻找符合条件的最小公差for (int cha = 2;; cha++) {  // 无限循环,从小的公差开始for (int i = 2; i < N; i++) {  // 遍历从 2 到 N 的每个数 i,尝试作为等差数列的起点if (ok(i, cha)) {  // 如果从 i 开始,公差为 cha 的 10 个数都是素数System.out.println(cha);  // 输出找到的最小公差return;  // 结束程序}}}}
}

http://www.ppmy.cn/devtools/116752.html

相关文章

代码随想录训练营 Day62打卡 图论part11 Floyd 算法 A * 算法

代码随想录训练营 Day62打卡 图论part11 Floyd 算法 例题&#xff1a;卡码97. 小明逛公园 题目描述 小明喜欢去公园散步&#xff0c;公园内布置了许多的景点&#xff0c;相互之间通过小路连接&#xff0c;小明希望在观看景点的同时&#xff0c;能够节省体力&#xff0c;走最短…

科大讯飞智能体Python SDK接入流程

第一步&#xff1a;注册账号​ 进入https://passport.xfyun.cn/login&#xff0c;根据提示注册或登陆账号。 ​ 第二步&#xff1a;创建智能体 进入这个网页创建智能体&#xff0c;填好信息&#xff1a; https://xinghuo.xfyun.cn/botcenter/createbot?createtrue&qu…

修改PS1,当进入git目录下,自动显示branch name

方法1. function git_branch { branch"git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //"" if [ "${branch}" ! "" ];then if [ $branch *"HEAD"* ];then branch"git…

CSS——网格布局(display: grid)之上篇

CSS——网格布局&#xff08;display: grid&#xff09; 前面介绍了弹性布局&#xff0c;今天我们介绍一下网格布局。 什么是网格布局 CSS网格布局&#xff08;CSS Grid Layout&#xff09;是一种用于创建复杂网页布局的系统&#xff0c;它允许开发者以二维系统&#xff08;…

设计模式 享元模式(Flyweight Pattern)

享元模式 简绍 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它的目的是通过共享技术来有效地支持大量细粒度的对象。享元模式可以极大地减少内存的使用&#xff0c;从而提高程序的性能。它特别适用于需要创建大量相似对象的场景&#…

1.4 边界值分析法

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 定义2 选取3 具体步骤4 案例分析 本篇文章参考黑马程序员 前言 边界值分析法是一种广泛应用于软件测试中的技术&#xff0c;旨在识别输入值范围内的潜在缺陷。本文将详细探讨…

淘宝npm镜像源更新后,如何正常使用npm命令

文章目录 一. npm命令报错二. 更换淘宝最新npm镜像源三. npm命令使用 一. npm命令报错 使用npm install *****命令 报错 npm error code CERT_HAS_EXPIRED npm error errno CERT_HAS_EXPIRED npm error request to https://registry.npm.taobao.org/express failed, reason: …

Scrapy爬虫框架 Pipeline 数据传输管道

在网络数据采集领域&#xff0c;Scrapy 是一个非常强大的框架&#xff0c;而 Pipeline 是其中不可或缺的一部分。它允许我们在数据处理的最后阶段对抓取的数据进行进一步的处理&#xff0c;如清洗、存储等操作。 本教程将详细介绍如何在 Scrapy 中使用 Pipeline&#xff0c;帮…