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