ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

for循环的进一步深入

2021-11-20 20:34:24  阅读:119  来源: 互联网

标签:第一个 int 质数 第二个 循环 深入 进一步 include


哥德巴赫猜想:即任一大于2的偶数都可写成两个质数之和。
例如18可以写成5+13或者7+11。
输入一个正整数n(2~1000000),请问n可以写成多少种不同两个质数相加的结果?

这是原题,当我刚看到这道题的时候一点思路都没有,经过一番思索,我想到了用for循环,但是该怎么用,首先要把输入数n的全部质因数找出来,在建立两个for循环,第一个for循环用来保存第一个质数,第二个for循环用来记录第二个质数,然后把它们相加,如果和不是n,再利用第二个for循环让第一个质数加上第三个质数,就这样循环,第二个for循环循环过一遍后,第一个for再循环一次,然后第二个for再完整循环一遍,一直到第一个for循环完,记录成立的数据,但是提交后时间超时,然后我又换了一种写法,还是一样的写法,就是只有一个for循环让它循环到n/2就行了 先判断循环数i是否是n的因子,再判断i是否为质数,如果是则让a-i得到j然后再判断j是否是质数,,如果是则记录下来,这样时间可以少一半。

//#include<iostream>
//#include<cmath>
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n,k,i,m,b,sum=0;
    cin>>n;
    for(int a=2; a<=n/2; a++) {
        i=0;
        for(k=2; k<=floor(sqrt(a)+0.5); k++) {
            if(a%k==0) {
                i++;
                break;
            }//判断a是否是质数 
        }
        if(i==0) {
            b=n-a;//用a,b,n之间的关系简化b的表达式 
            m=0;
            for(k=2; k<=floor(sqrt(b)+0.5); k++) {
                if(b%k==0) {
                    m++;
                    break;


                }
            }//验证b是否是质数 
            if(m==0)
                sum++;
        }
    }
    cout<<sum;
    return 0;
}

总结,在做题中如果遇到,找有几种方法,或找次数的题一般先向for循环上想,如果想不通再换其他方法,因为这样的题一般都可以用for循环解决。

标签:第一个,int,质数,第二个,循环,深入,进一步,include
来源: https://www.cnblogs.com/mokong/p/15582460.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有