其他分享
首页 > 其他分享> > for循环的进一步深入

for循环的进一步深入

作者:互联网

哥德巴赫猜想:即任一大于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