首页 > 其他分享 >每日一题Online Judge(OJ)1273 哥德巴赫猜想的所有解

每日一题Online Judge(OJ)1273 哥德巴赫猜想的所有解

时间:2024-11-28 13:32:06浏览次数:8  
标签:15 OJ 哥德巴赫猜想 int 质数 1273 see && Online

OK now 每日一题来了哦 
今天题目是Online Judge(OJ)编号为1273的哥德巴赫猜想的所有解
现在让我们一起来see see 题目
以下为哥德巴赫猜想简介
(1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:
任何一个大于9的奇数都可以表示成3个质数之和。
质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3。
需要特别说明的是 
1不是质数。这就是哥德巴赫猜想。欧拉在回信中说,他相信这个猜想是正确的,但他不能证明。
)
下面才是真正的题目 
求出哥德巴赫猜想的所有解(将一个大于9的奇数拆分成三个素数之和),并按从小到大的顺序写出。
输入
一行,一个大于 9的奇数。
输出
第一行,一个整数 N(N≤1200),表示解的总数。
第2-N+1行,每行一个解。 
样例
输入 15
输出 
3
15=2+2+11
15=3+5+7
15=5+5+5
oj原本让我用二维数组,但我一身反骨,偏不用。
接下来让我一起see see思路吧 
本题就是质数函数加上枚举,然后再从小到大输出来 
这道题就易如反掌 
代码来哦
随便先写一个判断质数函数

int f(int n){
    bool f=true;
    if(n==1)f=false;
    for(int i=2;i<n;i++)
    {
        if(n%i==0)f=false;
    }
    return f;
} 


okk
枚举走一个 

for(int i=1;i<=n/3;i++)
    {
        for(int j=1;j<=(n-i)/2;j++)
        {
            int k=n-i-j;        
        }
    } 


这边使用双重循环主要怕超时
判断已经可以走了

if(f(i)==1&&f(j)==1&&f(k)==1&&k>0&&i<=j&&i<=k&&j<=k)
        {    
            s++;
        }


这边可以用数组存起来因为后面要输出但我用简单易懂的方法
用两个循环就可以了
具体怎么做看下面 
废话不多说全部代码起
 

#include<bits/stdc++.h>
using namespace std;
int f(int n){
    bool f=true;
    if(n==1)f=false;
    for(int i=2;i<n;i++)
    {
        if(n%i==0)f=false;
    }
    return f;
}
int n,s=0; 
int main(){
    cin>>n;
    for(int i=1;i<=n/3;i++)
    {
        for(int j=1;j<=(n-i)/2;j++)
        {
            int k=n-i-j;
            if(f(i)==1&&f(j)==1&&f(k)==1&&k>0&&i<=j&&i<=k&&j<=k)
            {
                s++;
            }
        }
    }
    cout<<s<<endl;
    for(int i=1;i<=n/3;i++)
    {
        for(int j=1;j<=(n-i)/2;j++)
        {
            int k=n-i-j;
            if(f(i)==1&&f(j)==1&&f(k)==1&&k>0&&i<=j&&i<=k&&j<=k)
            {
                cout<<n<<"="<<i<<"+"<<j<<"+"<<k<<endl;
            }
        }
    }
    return 0;
}

标签:15,OJ,哥德巴赫猜想,int,质数,1273,see,&&,Online
From: https://blog.csdn.net/hjxxhesenyu/article/details/144094549

相关文章

  • 【分块】LibreOJ 6281 数列分块入门5
    前言对一个int类型的非负整数进行开方下取整,最多只会开方四次大小就不会再发生变化。一个大于\(0\)的正整数开方下取整最后的结果比如是\(1\),而\(1\)开方的结果仍然会是\(1\);\(0\)开方的结果仍是\(0\)。验证int类型整数最多可以开方的次数的demo#include<bits/stdc+......
  • CSC3050 Project 4: Cache Simulation
    CSC3050Project4:CacheSimulationCSC3050TeachingGroupNovember20,20241IntroductionCacheisanimportantcomponentofaCPUsystemthathasasignificantimpactoncomputerperformancebyreducingmemoryaccesstimes.Thefocusofthisprojectis......
  • 【分块】LibreOJ 6280 数列分块入门4
    题目https://loj.ac/p/6280题解将\(n\)个元素的数组\(a\)按块长\(\sqrt{n}\)进行分块处理。为每个块设置两个懒添加标记\(add[i],sum[i]\),分别代表这个区间每个元素共同添加的数值大小,区间和(不包括懒添加的值)。对于区间加操作,将添加值存储在符合整块都进行加法操作的......
  • 每日OJ_牛客_MT2棋子翻转_模拟_C++_Java
    目录牛客_MT2棋子翻转_模拟题目解析C++代码Java代码牛客_MT2棋子翻转_模拟棋子翻转_牛客题霸_牛客网描述:在4x4的棋盘上摆满了黑白棋子,黑白两色棋子的位置和数目随机,其中0代表白色,1代表黑色;左上角坐标为(1,1),右下角坐标为(4,4)。现在依次有一些翻转操作,要对以......
  • UOJ #919. 【UR #28】环环相扣 题解
    Description给定一个长度为\(n\)的整数序列\(a_1\sima_n\),其中的元素两两互不相等。有\(q\)个询问,每个询问给定一个区间\([l,r]\),你要选择三个下标\(i,j,k\in[l,r]\)满足\(i\neqj,j\neqk,k\neqi\),最大化\((a_i\bmoda_j)+(a_j\bmoda_k)+(a_k\bmoda_i)\)的值。......
  • 【分块】LibreOJ 6278 数列分块入门2
    题目https://loj.ac/p/6278题解将\(n\)个元素的数组\(a\)按块长\(\sqrt{n}\)进行分块处理。为每个块设置一个懒添加标记\(add[i]\),代表这个区间每个元素共同添加的数值大小。对于任意一个无序数组,想要维护出该数组内小于某个值的元素个数,时间复杂度都将来到\(O(n)\);对......
  • 【分块】LibreOJ 6279 数列分块入门3
    题目https://loj.ac/p/6279题解将\(n\)个元素的数组\(a\)按块长\(\sqrt{n}\)进行分块处理。为每个块设置一个懒添加标记\(add[i]\),代表这个区间每个元素共同添加的数值大小。对于任意一个无序数组,想要维护出该数组内某个值的前驱(即小于某个值的最大元素),时间复杂度都将......
  • Online Anomalous Subtrajectory Detection onRoad Networks with Deep Reinforcement
    用到的数据集以下是对文中实验数据的解读:数据集概况来源:数据来自滴滴出行的两个真实世界的出租车轨迹数据集,分别是成都和西安。使用了开放地图项目(OpenStreetMap)获取两地的道路网络。轨迹数量:成都:677,492条轨迹。西安:373,054条轨迹。道路网络:道路段数量(segmen......
  • OJ题目详解——1.5~42:画矩形
    描述根据参数,画出矩形。输入输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。输出输出画出的图形。#include<stdio.h>intmain()......
  • OJ题目详解——1.5~31:开关灯
    描述假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。......