首页 > 其他分享 >洛谷P1304 哥德巴赫猜想 (质数题) (内含埃氏筛和欧拉筛等一些小总结解释)

洛谷P1304 哥德巴赫猜想 (质数题) (内含埃氏筛和欧拉筛等一些小总结解释)

时间:2024-06-19 18:57:32浏览次数:28  
标签:prime 洛谷 int 质数 lines 偶数 P1304 代码

题目

题目解析

题目意思很简单,对于每一组数据来说,就是找这个偶数的两个质数相加的那两个质数,并且要满足加法中的第一个质数要是最小的质数,满足第一个质数是最小的质数的情况下也要保证第二个数也是质数

代码

#include <bits/stdc++.h>
using namespace std;

bool is_prime(int n)//用于检查一个数是否为质数
{
    for(int i=2;i*i<=n;i++)//从2开始到sqrt(n)进行试除
        if(n%i==0)return false;//如果 n 能被 i 整除,则 n 不是质数,返回 false。
    return true;//如果没有在循环中找到能整除 n 的数,则 n 是质数,返回 true。
}
int main()
{
    int N;
    cin >> N;
    int lines=(N-2)/2;//计算需要输出的行数,即偶数 4 到 N 中的偶数数量。
    for(int i=1;i<=lines;++i)//遍历每个偶数 2*i + 2,其中 i 从 1 到 lines。
    {
        int num=2*i+2;//计算当前偶数 num。
        for(int j=2;j<=num/2;j++)//在 2 到 num/2 范围内寻找两个质数 j 和 num - j,使得它们的和等于 num。
        {
            if(is_prime(j)&&is_prime(num-j))//如果 j 和 num - j 都是质数,则输出 num = j + (num - j) 的形式。
            {
                cout << num << "=" << j << "+" << num-j << endl;
                break;//找到一组符合条件的质数对后,跳出内层循环,继续下一个偶数的验证。
            }
        }
    }
    return 0;
}

代码解读

代码使用了试除法来验证哥德巴赫思想

  1. is_prime函数:该函数用于判断一个数是否为质数。它通过试除法(从2到该数的平方根)逐个检查是否能整除,若能整除则返回false,否则返回true。

  2. 主程序部分

    • 输入一个正偶数N。
    • 根据给定的正偶数N,计算需要输出的行数lines。每一行对应一个偶数 (2i+2)(其中 i 从 1 到 lines)。
    • 遍历每个偶数 (2i+2),并使用内层循环在2到该偶数的一半之间寻找两个质数 (j) 和 (num-j),使得它们的和等于该偶数。
    • 如果找到符合条件的质数对,则输出结果,并跳出内层循环。

在is_prime中没有考虑特殊情况当n=1(if (n <= 1) return false;),因为在这道题中没有必要考虑这个情况。

总结

 该题难度不大为入门题。主要想讲的是质数之类的东西,所以根据老师ppt手写了个小总结(下面介绍的方法的主要代码已发表至下篇“小明的素数对”这篇博文)

 

标签:prime,洛谷,int,质数,lines,偶数,P1304,代码
From: https://blog.csdn.net/morantneymarstep/article/details/139741934

相关文章

  • 洛谷 P1020 导弹拦截
    题目链接:导弹拦截思路    代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+5;inta[N],x,l,dp[N],maxn;intg[N],cnt;intmain(){while(cin>>x)a[++l]=x;for(inti=1;i<=l;i++){intk=1......
  • P1255洛谷
    #include<bits/stdc++.h>#include<math.h>#include<cmath>usingnamespacestd;constintmaxn=5050;structBigInt{  inta[maxn];  intlen;  BigInt(){len=1;memset(a,0,sizeofa);}  BigInt(char*s){    len=strlen(s);  ......
  • 洛谷 B3867 [GESP202309 三级] 小杨的储蓄 题解
     题目题目-[GESP202309三级]小杨的储蓄-洛谷题目描述小杨共有 ......
  • 洛谷 P1122 最大子树和
    题目链接:最大子树和思路    由于可以无限剪枝,所以假设以节点1为根,并删去所有美丽质数小于0的子树,又考虑到可能会出现根节点为负数,导致可能会只留下子树而把节点1为根节点的其他部分扔掉,所以需要dp数组记录,dp[i]为以节点i为根节点能得到的最大的美丽指数,贪心将节点i的子......
  • 洛谷 P1162 填涂颜色
    题目链接:填涂颜色思路代码#include<bits/stdc++.h>usingnamespacestd;constintN=30+10;#definelllonglongintmp[N][N],dir[5][2]={{1,0},{0,1},{-1,0},{0,-1}},n;boolvis[N][N];boolcheck(intx,inty){returnx>=......
  • 洛谷 P1216 数字三角形
    题目链接:数字三角形思路    dp:金字塔顶的元素为起点,金字塔每行的最左侧数字只能从上一层的最左侧数字到达,如7->3->8->2->4,这些数字中的每一个(除起点7外)都只能从上一层的最左侧数字到达,递推公式为dp[i][1]=max(dp[i][1],num[i][1]+dp[i-1][1],最右侧数字......
  • 洛谷 P4343 自动刷题机
    题目链接:自动刷题机思路    二分典题,两个二分判断出可能的最大值和最小值。需要注意当删掉y行代码后,当前代码行数小于0时需要将代码行数重新赋值为0,然后需要注意二分的n最大值的边界,因为x[i]的最大值为1e9,日志最多有1e5行,所以考虑极限情况,日志每一行都是写了1e9行代码,......
  • 洛谷 P1226 快速幂
    题目链接:快速幂思路    简单快速幂模板。a^17=(a^2)^8*a,此时pow()中的y就可以视为17->8(y>>=1),pow()中的x就是底数a->a^2(x*=x),结果res可以视为在循环时多出来的后边乘的a,1->a(res*=x),简单代数推导就会发现y=1的时候,会有res*=x此时的x为a^16,则......
  • 洛谷 P5595 歌唱比赛
    题目链接:歌唱比赛思路    根据题目分析可得,假如小x的点赞数是123111,小y的点赞数是234111,则字符串的第4为到第6位结果都为Z,分别为对比(111,111),(11,11),(1,1),字符串的第三位为Y,为对比(3111,4111),则结果字符串为YYYZZZ。    此时可以轻易判断出字符串中第一个Z后面的所有字母......
  • 洛谷P8807 [蓝桥杯 2022 国 C] 取模
    题目:解读(思路与分析):题目总结:对于给定的整数n和范围m,要找到两个不同的x和y,它们除以n后的余数相等。思路:对于每组给出的n,m询问,可以通过遍历范围从1到m的所有可能的j,并计算n对j取模的余数。使用一个集合来存储已经出现过的余数,如果当前余数已经存在于集......