PTA竞速 7-4 哥德巴赫猜想
7-4 哥德巴赫猜想 (10分)
“这是我和其他选手比谁过题过得更快的游戏”
对于任何大于或等于4的偶数n,存在至少一对素数p1和p2,使得n = p1 + p2
没有人确定这个猜想是否真的成立。然而,对于给定的偶数,可以找到这样的一对素数(如果有的话)。这里的问题是编写一个程序,打印出满足给定偶数的猜想条件的所有素数对数。
一个偶数序列作为输入。可以有很多这样的数字。对应于每个数字,程序应输出上述对的数量。请注意,我们只统计不同的数对,因此不应将(p1,p2)和(p2,p1)分别计为两对不同的对。
输入格式:
在每个输入行中给出一个整数。你可以假定每个整数是偶数,并且大于或等于4且小于2的15次方。输入的结尾用数字0表示。
输出格式:
每个输出行应该包含一个整数。输出中不应出现其他字符。
输入样例:
在这里给出一组输入。例如:
6
10
12
0
输出样例:
在这里给出相应的输出。例如:
1
2
1
这个题,让我头秃了一晚上
经过卑微学习和多次试验,,,,这是最快的代码
#include <bits/stdc++.h>
using namespace std;
bool isSu(int n)
{
if(n==1||n==4)return 0;
else if(n==2||n==3||n==5)return 1;
if(n%6!=1 && n%6!=5)return 0;
else{
for (int i = 5; i <= pow(n,0.5); i+=6) {
if(n%i==0 || n%(i+2)==0)return 0;
}
}
return 1;
}
int main() {
int a,h;
while (1){
cin>>a;
if(a==0)break;
else{
h=0;
for (int i = 1; i <= a/2; ++i) {
if(isSu(i) && isSu(a-i))h++;
}
cout<<h<<endl;
}
}
return 0;
}
对不起我是个渣渣。。。
啊啊啊第二天
经过大佬指点,以空间为代价换时间,int类型占空间大(4或8字节),所以定义bool类型数组(bool类型只占一个字节)
AC代码:
#include <bits/stdc++.h>
using namespace std;
//bool isSu(int n)
//{
// if(n==1||n==4)return 0;
// else if(n==2||n==3||n==5)return 1;
// if(n%6!=1 && n%6!=5)return 0;
// else{
// for (int i = 5; i <= pow(n,0.5); i+=6) {
// if(n%i==0 || n%(i+2)==0)return 0;
// }
// }
// return 1;
//}
bool prime[32769];
void Prime(){
for (int i = 2; i <= 32769; i++) {
prime[i] = true;
}
for (int i = 1; i * i <= 32769; i++) {
if (prime[i]) {
for (int j = i * i; j <= 32769; j += i) {
prime[j] = false;
}
}
}
}
int main() {
int a,h;
while (1){
cin>>a;
if(a==0)break;
else{
h=0;
Prime();
for (int i = 1; i <= a/2; ++i) {
if(prime[i] && prime[a-i])h++;
}
cout<<h<<endl;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效