博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
寻找素数对
阅读量:2242 次
发布时间:2019-05-09

本文共 1308 字,大约阅读时间需要 4 分钟。

寻找素数对

时间限制:2000/1000 MS(Java / Others)内存限制:65536/32768 K(Java / Others) 
总提交:13910接受提交:7018

问题描述 
哥德巴赫猜想大家都知道一点吧。我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数。 
做好了这件实事,就能说明这个猜想是成立的。 
由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的。

输入 
输入中是一些偶整数M(5 <M <= 10000)。

产量 
对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数。

样品输入 
20 30 40

样品输出 
7 13 
13 17 
17 23

#include 
#include
using namespace std; bool is_prime(int n) {
if (n < 2) return false; for(int i = 2; i <= sqrt((double)n); ++i) {
if ((n % i) == 0) return false; } return true; } void find_max_prime(int num) {
int left = num >> 1, right = num >> 1; while (right < num) {
while (!is_prime(right)){
right++; } while (!is_prime(left)) left--; if (left + right == num){
printf ("%d %d\n",left,right); return; } else if(left + right > num) left--; else right++; } } int main() {
int n; while(scanf("%d",&n) == 1){
find_max_prime(n); } return 0; }

解题思路: 用两个数(left,right)分别表示mid_of_num-- 和mid_of_num++,先判断is_prime(right),is_prime(left),再判断和 left + right == num; 
注:if (left + right > num) left--;else right++;

转载地址:http://ptgbb.baihongyu.com/

你可能感兴趣的文章
剑指offer 21.包含min函数的栈
查看>>
剑指offer 23.从上往下打印二叉树
查看>>
Leetcode C++《热题 Hot 100-18》538.把二叉搜索树转换为累加树
查看>>
Leetcode C++《热题 Hot 100-21》581.最短无序连续子数组
查看>>
Leetcode C++《热题 Hot 100-22》2.两数相加
查看>>
Leetcode C++《热题 Hot 100-23》3.无重复字符的最长子串
查看>>
Leetcode C++《热题 Hot 100-24》5.最长回文子串
查看>>
Leetcode C++《热题 Hot 100-28》19.删除链表的倒数第N个节点
查看>>
Leetcode C++《热题 Hot 100-29》22.括号生成
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>