猜想2

/*  
 * Copyright (c) 2012, 烟台大学计算机学院  
* All rights reserved.  
* 作    者:杨蕾  
* 完成日期:2012 年  10月 20日  
* 版 本 号:v1.0  
*  
* 输入描述: 无 
* 问题描述:略 
* 程序输出:略
* 问题分析: 
* 算法设计:  
*/    
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	int a=2,b=2,c1,c2;
    c1=((a+b)+abs(a-b))/2;//abs()求绝对值
	a=a+b;
	b=a-b;
	a=a-b;
	c2=((a+b)+abs(a-b))/2;
	cout<<"a="<<a<<",b="<<b<<endl;
	cout<<"c1="<<c1<<",c2="<<c2<<endl;
	return 0;
}
运行结果:

心得体会:我的结果与运行结果完全不同哭







                
验证哥德巴赫猜想2需要枚举所有的可能情况,因此需要使用一些算法优化。 以下是使用 Miller-Rabin 素性测试和 Pollard-Rho 因子分解算法实现的代码: ```python import random def is_prime(n, k=50): """Miller-Rabin素性测试""" if n < 2: return False if n == 2 or n == 3: return True if n % 2 == 0: return False r, s = 0, n - 1 while s % 2 == 0: r += 1 s //= 2 for _ in range(k): a = random.randint(2, n - 2) x = pow(a, s, n) if x == 1 or x == n - 1: continue for _ in range(r - 1): x = pow(x, 2, n) if x == n - 1: break else: return False return True def pollard_rho(n): """Pollard-Rho因子分解""" if n % 2 == 0: return 2 x = random.randint(1, n - 1) c = random.randint(1, n - 1) y = x d = 1 while d == 1: x = (pow(x, 2, n) + c) % n y = (pow(y, 2, n) + c) % n y = (pow(y, 2, n) + c) % n d = gcd(abs(x - y), n) if d == n: return pollard_rho(n) return d def gcd(a, b): """求最大公约数""" while b: a, b = b, a % b return a def find_prime_factors(n): """分解质因数""" factors = [] while n > 1: if is_prime(n): factors.append(n) break else: factor = pollard_rho(n) factors.extend(find_prime_factors(factor)) n //= factor return factors def find_prime_sum(n): """寻找三个素数之和""" if n < 7 or n % 2 == 0: return None for i in range(2, n - 4): if is_prime(i) and is_prime(n - i - 2): return (2, i, n - i - 2) factors = find_prime_factors(n - 4) for i in range(len(factors)): for j in range(i, len(factors)): if is_prime(n - factors[i] - factors[j]): return (factors[i], factors[j], n - factors[i] - factors[j]) return None # 测试 n = 99999991 sum = find_prime_sum(n) if sum: print("{} = {} + {} + {}".format(n, sum[0], sum[1], sum[2])) else: print("无法拆分成三个素数之和") ``` 这里的 `is_prime` 函数使用了 Miller-Rabin 素性测试,可以在 $O(k\log^3n)$ 的时间内判断一个数是否为素数,其中 $k$ 是测试次数,一般取 50 左右。 `pollard_rho` 函数使用了 Pollard-Rho 因子分解算法,可以在 $O(\sqrt[4]{n})$ 的时间内分解一个合数,其中 $\sqrt[4]{n}$ 是 $n$ 的四次方根。 `find_prime_factors` 函数使用了 Pollard-Rho 因子分解算法,可以在 $O(\sqrt[4]{n}\log n)$ 的时间内分解一个合数。 `find_prime_sum` 函数先枚举 $2$ 到 $n-4$ 之间的素数 $p$,再判断 $n-p-2$ 是否为素数。如果不存在这样的素数,则使用 Pollard-Rho 因子分解算法分解 $n-4$,然后枚举所有可能的两个因子 $a$ 和 $b$,再判断 $n-a-b$ 是否为素数。如果都无法拆分成三个素数之和,则返回 `None`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值