当前位置: 首页 > news >正文

拓展上机-3题解:哥德巴赫猜想

哥德巴赫猜想

在这里插入图片描述

方法一:试除法

注意:

  • i ≤ x i i≤\frac{x}{i} iix是最好的写法。
  • 如果是写成 s q r t ( x ) sqrt(x) sqrt(x),每次判断 i i i是否小于 s q r t ( x ) sqrt(x) sqrt(x)都要调用 s q r t sqrt sqrt这个函数,造成时间的浪费。
  • 也有写成 i × i ≤ x i\times i≤x i×ix的,这种写法也不好,如果 i × i i\times i i×i的结果超数据范围了,那么就会变成负数。
#include<stdio.h>
#include <stdbool.h>
#include<math.h>
#define N 10000
bool vis[4 * N];//false表示是素数,否则不是素数
int prime[N];//存储素数
int cnt = 0;//下标,同时可以计算素数的个数
int main() {
	int x;
	while (scanf("%d", &x)) {
		if (x == 0) break;
		int cp = 0;//统计素数对
		for (int i = 2; i <= x / 2; i++) {
			//判断i和x-i是否都是素数
			int sign = 0;
			for (int j = 2; j <= i / j; j++) {
				if (i % j == 0) {
					sign = 1;
					break;
				}
			}
			if (sign == 1) continue;
			for (int j = 2; j <= (x - i) / j; j++) {
				if ((x - i) % j == 0) {
					sign = 1;
					break;
				}
			}
			if (sign == 0) cp++;
		}
		printf("%d\n", cp);
	}
	return 0;
}

在这里插入图片描述

方法二:埃式筛

思想:质数的倍数一定不是质数,一个合数(非质数)一定能被质数整除。

补充:

  • 质数定理: 1 − n 1-n 1n中有 n l n n \frac{n}{ln n} lnnn个质数
  • 时间复杂度 O ( n l o g l o g n ) O(nloglogn) O(nloglogn)
#include<stdio.h>
#include <stdbool.h>
#include<math.h>
#define N 10000
bool vis[4 * N];//false表示是素数,否则不是素数
int prime[N];//存储素数
int cnt = 0;//下标,同时可以计算素数的个数
int main() {
	int n = 2 << 14;
	for (int i = 2; i <= n; i++) {//判断2-n中的素数
		if (!vis[i]) prime[cnt++] = i;//存储素数
		for (int j = i + i; j <= n; j += i) {
			vis[j] = true;//所有素数的倍数都不是素数 
		}
	}
	int x;
	while (scanf("%d", &x)) {
		int cp = 0;
		if (x == 0) break;
		for (int i = 0; prime[i] <= x / 2; i++)
			if (!vis[x - prime[i]]) cp++;
		printf("%d\n", cp);
	}
	return 0;
}

在这里插入图片描述

方法三:线性筛

n ≈ 1 0 6 n≈10^{6} n106,线性筛和埃氏筛的时间效率差不多,若 n ≈ 1 0 7 n≈10^{7} n107,线性筛会比埃氏筛快了大概一倍。

线性筛这个算法的核心在于筛质数的时候规定一个数只能被它的最小质因数筛掉

#include<stdio.h>
#include <stdbool.h>
#include<math.h>
#define N 10000
bool vis[4 * N];//false表示是素数,否则不是素数
int prime[N];
int cnt = 0;
int main() {
	int n = pow(2, 15);//2 << 14
	for (int i = 2; i <= n; i++) {//先求出所有的素数
		if (!vis[i]) prime[cnt++] = i;//是素数
		for (int j = 0; prime[j] <= n / i; j++) {//剔除掉素数的倍数,也就是非素数
			vis[prime[j] * i] = true;
			if (i % prime[j] == 0) break;
			//这一步是干什么的呢,如果i % prime[j] == 0,prime[j]<i(一定)
			//prime[j]只能是i的最小质因数,也是i*prime[j]的最小质数
			//prime里面的质数是由小到大存储的,如果只有当前的prime[j]能整除i,那么先前的prime都不能,所以先前的prime都不是i的因数,而后面的prime[j]也不可能作为i的最小质因数因为后面的prime比当前的prime[j]大
			//可以直接break了
			//当i % prime[j] != 0时,也就是说prime[j]比i的最小质因数小,且prime[j]是prime[j]*i的因数,所以prime[j]就是prime[j]*i的最小质因数

		}
	}
	int x;
	while (scanf("%d", &x)) {
		if (x == 0) break;
		int cnt = 0;
		for (int i = 0; prime[i] <= x / 2; i++)
			if (!vis[x - prime[i]]) cnt++;
		printf("%d\n", cnt);
	}
	return 0;
}

在这里插入图片描述

相关文章:

  • 如果你看不懂别人画的 UML 类图,看这一篇文章就够了
  • 【论文】论文阅读记录
  • 【第三十九讲】Boot 启动流程
  • ApkScan-PKID 查壳工具下载使用以及相关技术介绍
  • 从BNB遭黑客攻击(跨链桥BSC Token Hub遭到攻击),看公链中心化问题
  • 【多线程实践】一、为何使用多线程三种线程创建方式利弊分析
  • LIFELONG LEARNING WITH DYNAMICALLY EXPANDABLE NETWORKS论文阅读+代码解析
  • 计算机网络——集线器与交换机
  • 用通俗易懂的方式讲解:CatBoost 算法原理及案例
  • 系统架构演变和SpringCloud的定义:
  • 后端必会的前端vue基础知识
  • VGG16 - 咖啡豆识别
  • 2022.10.7 英语背诵
  • 『Android』什么是Service
  • 【Windows核心编程+第一个内核程序】爆肝120小时整理-80%程序员最欠缺的能力,一半以上研究生毕业了还不懂?理解各种深度技术的基本功
  • [Vue CLI 3] 配置解析之 css.extract
  • 【React系列】如何构建React应用程序
  • Docker: 容器互访的三种方式
  • Docker容器管理
  • HashMap ConcurrentHashMap
  • iOS | NSProxy
  • JAVA并发编程--1.基础概念
  • Java多态
  • js学习笔记
  • leetcode讲解--894. All Possible Full Binary Trees
  • React+TypeScript入门
  • scala基础语法(二)
  • unity如何实现一个固定宽度的orthagraphic相机
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Zsh 开发指南(第十四篇 文件读写)
  • 多线程事务回滚
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 如何进阶一名有竞争力的程序员?
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (27)4.8 习题课
  • (c语言)strcpy函数用法
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Note)C++中的继承方式
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)ABI是什么
  • (转)人的集合论——移山之道
  • *Django中的Ajax 纯js的书写样式1
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net 设置默认首页