首页 > 其他分享 >使用函数验证哥德巴赫猜想

使用函数验证哥德巴赫猜想

时间:2024-11-30 18:05:29浏览次数:10  
标签:prime 函数 验证 int Goldbach 偶数 素数 哥德巴赫猜想

Description

本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。最后给定两个整数m和n,按顺序输出满足条件的数,并按一定形式输出。(素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。)

函数接口定义:

int prime( int p );

void Goldbach( int n );

其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。

Input

一行两个整数m和n。(6 <= m <= n <= 1000)。

Output

输出若干行,每行以“n=p+q”的格式输出。

Sample Input 1 

89 100

Sample Output 1

90=7+83
92=3+89
94=5+89
96=7+89
98=19+79
100=3+97

思路分析:


1.素数如何实现:首先了解一下素数的定义,遍历从2到一个值【这个值可以是根号下n,为了提高计算效率因为如果大于根号下n的部分其实属于是重复计算】,看是否能够被其中任意一个数整除;若能够被某个数整除,不是素数返回0,若都不能被整除则是素数返回1

2.Goldbach函数:从m到n进行遍历,只要遇到偶数就尝试拆分(为了节省算力和提高时间效率)因为如果拆分为一个偶数素数只有2,并且一个偶数减去2还是偶数(且因为这个偶数的限制条件是大于6),因此一定不是素数;所以我们可以从3开始遍历,每次自增2,尽量保证是素数以减少判断次数。(比如90 我们遍历应从3开始,判断3是素数之后开始判断87是否为素数...7是素数正巧83也是素数,打印输出并跳出循环)

代码实现:(C++)

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int prime(int p) {
    int flag = 1;
    for(int r = 2;r<=sqrt(p);r++) {
        if(p%r==0) {
            flag = 0;
            break;
        }
    }
    if(flag==1)return 1;
    return 0;
}
void Goldbach(int m,int n) {
    for(int i = m;i<=n;i++) {
        if(i%2==0) {
            //如果这个数是大于6的偶数,可以拆成两个素数之和
            for(int t = 3;t<=i/2;t+=2){
                if(prime(t)==1&&prime(i-t)==1) {
                    cout<<i<<"="<<t<<"+"<<(i-t)<<endl;
                    break;
                }
            }
        }
    }
}
int main() {
    int m,n;
    cin>>m>>n;
    Goldbach(m,n);
    return 0;
}

C语言:

#include<stdio.h>
int prime(int p){
	if(p<=1)
		return 0;
	for(int i=2;i*i<=p;i++)
		if(p%i==0)
			return 0;
			  return 1;
}

void Goldbach(int n){
	for(int i=2;i<n/2;i++){
		if(prime(i)&&prime(n-i)){
			printf("%d=%d+%d\n",n,i,n-i);
			break;
		}
	}
} 

int main(){
	int m,n;
	scanf("%d %d",&m,&n);
	if(m<6)m=6;
	if(m%2!=0)m++;
	for(int i=m;i<=n;i+=2)
		Goldbach(i);
	return 0;
} 

标签:prime,函数,验证,int,Goldbach,偶数,素数,哥德巴赫猜想
From: https://blog.csdn.net/2301_80309996/article/details/144157998

相关文章

  • 基于查表法实现 Softmax 函数
    1简介在深度学习领域,Softmax函数是一种广泛应用的激活函数,尤其在多分类问题中表现突出。它能够将原始的得分转换为概率分布,使每个类别的概率值都处于0到1之间且总和为1。Softmax内含有大量的指数运算,这使得它在嵌入式端(例如RV1106)上计算较慢。针对量化模型,模型的输出一......
  • C#里怎么样使用Array.BinarySearch函数?
    C#里怎么样使用Array.BinarySearch函数?因为二分算法如此重要,所以要多加练习。但是它的返回值,也有三种状态,导致很多人使用它的时候,也感觉到迷惑的。在这里的例子演示了三种返回值的使用: /**C#ProgramtoSearchanelementwithArrayIndices*/usingSystem;c......
  • 关于创建新登录用户使用SQL Server验证登录时报错全过程解决方法(错误: 18456,不包含网
    想必大家在创建新登录用户时会遇到一些问题例如:但是账号密码都已经反复确认过没错了之前我在很多博文看到的解决方法都不能正确解决这个问题,接下来我就来解决下这个问题1.首先创建一个新的登录用户下面配置是这样子的:登录名testlogin密码123下面这张图注意了!如果你......
  • 使用 Fantom 编程语言实现英文数字验证码识别
    Fantom是一种轻量级、跨平台的编程语言,提供了简洁且高效的语法。尽管Fantom并没有像Python或Java那样直接集成强大的图像处理库,但它可以通过外部工具与库进行集成,完成图像识别任务。本文将展示如何使用Fantom编程语言完成验证码的识别任务。准备工作首先,你需要确保有......
  • 识别英文数字验证码的程序(Python示例)
    在本篇文章中,我们将使用Python来实现一个英文数字验证码识别的程序。我们会使用TesseractOCR(OpticalCharacterRecognition,光学字符识别)来识别验证码中的文本内容。环境准备首先,需要安装以下Python库:Pillow:用于图像处理。pytesseract:Tesseract的Python包,用于文......
  • 识别英文数字验证码的程序(C# 示例)
    在本篇中,我们将使用TesseractOCR通过C#来实现英文数字验证码的识别。环境准备步骤1:安装TesseractOCRWindows:可以下载并安装TesseractWindows安装包。Linux:通过以下命令安装:bashsudoapt-getinstalltesseract-ocrMacOS:通过Homebrew安装:bashbrewinstall......
  • 基于 Eigen 实现 Softmax 函数
    1简介Eigen是一个高效、易于使用的C++模板库,广泛应用于线性代数计算。本文将介绍如何使用Eigen实现Softmax函数,这是一种常用的归一化函数,在深度学习中具有重要应用。通过Eigen的矩阵运算和向量运算,我们可以快速、准确地实现Softmax函数,提高深度学习模型的训练和推理......
  • 使用 Eigen 实现 CosineSimilarity 函数
    1简介Eigen是一个高效、易于使用的C++模板库,广泛应用于线性代数计算。本文将介绍如何使用Eigen实现CosineSimilarity函数,这是一种常用的相似度度量方法,可以用于衡量两个向量之间的相似程度。通过Eigen的矩阵运算和向量运算,我们可以快速、准确地实现CosineSimilarity函......
  • 《SVM 中核函数的选择:开启精准分类与回归的关键钥匙》
    在支持向量机(SVM)的世界里,核函数就像是一个神奇的魔法师,它能够将低维空间的数据映射到高维空间,从而让原本在低维空间中线性不可分的数据在高维空间中变得线性可分。然而,如何选择合适的核函数却是一个充满技巧和考量的过程,这直接关系到SVM模型的性能和准确性。一、理解核函数......
  • scanf函数、getchar函数、gets函数等函数的误区(回车输出问题)
     目录一、运行原理二、从代码角度观察三、总结四、那怎么解决这种情况呢(1)、方法一(2)、方法二 五、补充一、运行原理scanf函数、getchar函数、gets函数等这类函数是这样的运行的:可以看出来,scanf函数并不是键盘按什么,就读取什么,换种说法是键盘输入和函数读取不......