博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Goldbach 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛
阅读量:5243 次
发布时间:2019-06-14

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

Description:

Goldbach's conjecture is one of the oldest and best-known unsolved problems in number theory and all of mathematics. It states:

Every even integer greater than 2 can be expressed as the sum of two primes.

The actual verification of the Goldbach conjecture shows that even numbers below at least 1e14 can be expressed as a sum of two prime numbers. 

Many times, there are more than one way to represent even numbers as two prime numbers. 

For example, 18=5+13=7+11, 64=3+61=5+59=11+53=17+47=23+41, etc.

Now this problem is asking you to divide a postive even integer n (2<n<2^63) into two prime numbers.

Although a certain scope of the problem has not been strictly proved the correctness of Goldbach's conjecture, we still hope that you can solve it. 

If you find that an even number of Goldbach conjectures are not true, then this question will be wrong, but we would like to congratulate you on solving this math problem that has plagued humanity for hundreds of years.

Input:

The first line of input is a T means the number of the cases.

Next T lines, each line is a postive even integer n (2<n<2^63).

Output:

The output is also T lines, each line is two number we asked for.

T is about 100.

本题答案不唯一,符合要求的答案均正确

样例输入

18

样例输出

3 5
题目大意就是给你一个偶数,让你把偶数分成两个素数和,输出任意一组答案即可打表发现可能的分解情况中,较小的那个素数非常小,最大不过在一万左右所以现在问题就变成了如何快速的判断一个数是否为素数所以要用“Miller-Rabin素数检测算法”,具体参加如下博客要注意的是题目给的数非常大,即使用long long存稍微算一下加法也会炸所以要用unsigned long long 运算,输出用 %llu
 
#include 
#include
#include
#define N 10000using namespace std;typedef unsigned long long ll;ll ModMul(ll a,ll b,ll n)//快速积取模 a*b%n{ ll ans=0; while(b) { if(b&1) ans=(ans+a)%n; a=(a+a)%n; b>>=1; } return ans;}ll ModExp(ll a,ll b,ll n)//快速幂取模 a^b%n{ ll ans=1; while(b) { if(b&1) ans=ModMul(ans,a,n); a=ModMul(a,a,n); b>>=1; } return ans;}bool miller_rabin(ll n)//Miller-Rabin素数检测算法{ ll i,j,a,x,y,t,u,s=10; if(n==2) return true; if(n<2||!(n&1)) return false; for(t=0,u=n-1; !(u&1); t++,u>>=1); //n-1=u*2^t for(i=0; i

原文链接:

哇,当时自己心态快崩了,什么方法都试过,这个算法也知道,可能因为自己定义了 unsigned long long 型,但却用%lld 输入输出,可能因为这样,所以运行的时候直接不正常,,,还是慢慢研究吧,这个题当模板挺不错的。微笑

转载于:https://www.cnblogs.com/zitian246/p/9123584.html

你可能感兴趣的文章
二分图匹配
查看>>
【树状数组区间修改单点查询+分组】HDU 4267 A Simple Problem with Integers
查看>>
【CCF】JSON查询
查看>>
LINUX数据库的备份,以及远程授权登陆
查看>>
EF 中获取 TableAttribute的值,即数据库中真实的表名
查看>>
SVN简明使用教程
查看>>
YII地址切换
查看>>
git 推送远程仓库和删除远程仓库文件
查看>>
Highcharts入门(一)
查看>>
在ASP.NET 5中读取配置文件
查看>>
设计模式之抽象工程模式
查看>>
待读书目
查看>>
数据字典
查看>>
电梯调度算法需求分析
查看>>
Qt编译安装后中文无法显示问题
查看>>
C语言学习日记3
查看>>
我的职业生涯规划的思考
查看>>
一些CA要点
查看>>
【BW系列】SAP BW实时抽取ECC数据的实现
查看>>
Excel导出(适合项目开发)
查看>>