7. 第10001个质数
前6个质数分别是2、3、5、7、11和13。
第10 001个质数是多少?
解题思路
从0开始循环,判断是否为质数,是质数则加1,直到第10001个
判断质数:for(int i=2;i*i<=x;i++) if(x%i==0) 不为质数
#include<iostream>
using namespace std;
bool fun(int x)
{
if(x<=1) return 0;
for(int i=2;i*i<=x;i++) //判断是否为质数
{
if(x%i==0) return 0;
}
return 1;
}
int main()
{
int t=0,i=1;
while(t<10001)
{
i++;
if(fun(i)) t++;
}
cout<<i;
}
9. 特殊毕达哥拉斯立斯三元组
毕达哥拉斯三元组由三个自然数
a < b < c组成,并满足
aa + bb = c*c
例如, 32+42 = 9 + 16 = 25 = 52。
有且只有一个
毕达哥拉斯三元组满足 α + 6 + c = 1000。求这个三元组的乘积abc.
解题思路
两个for嵌套循环,c由1000-a-b得到,判断aa+bb==c*c?
#include <bitsdc++.h>
using namespace std;
int main()
{
int flag=0;
for(int a=1;a<1000;a++)
{
for(int b=1;b<1000;b++)
{
int c=1000-(a+b);
if(a*a+b*b==c*c)
{
flag=1;
cout<<a*b*c<<endl;
break;
}
}
if(flag==1) break;
}
}
10. 质数求和
所有小于10的质数的和是2+3+5+7= 17。
求所有小于两百万的质数的和。
解题思路
小于两百万条件下循环, 判断是否为质数,是则相加;
#include<bitsdc++.h>
using namespace std;
bool fun(int x)
{
if(x<=1) return 0;
for(int i=2;i*i<=x;i++)
{
if(x%i==0) return 0;
}
return 1;
}
int main()
{
long long sum=0;
long long i=1;
while(i<2000000)
{
i++;
if(fun(i))
{
sum+=i;
}
}
cout<<sum<<endl;
}