26.求素数
求1000以内的所有素数。
#include <iostream>
using namespace std;
void main()
{
int n,i,count=0,f;
for(n=2;n<1000;n++)
{
for(f=0,i=1;i<n;i++)
if(n%i==0) f++;
if(f==1)
{
cout<<n<<" ";
count++;
if(count%15==0) cout<<endl;
}
}
}
27.哥德巴赫猜想
验证:2000以内的正偶数都能够分解为两个素数之和(即验证哥德巴赫猜想对2000以内的正偶数都成立)。
#include <iostream>
using namespace std;
int isprime(int n)
{
int i,f=0;
for(i=1;i<=n;i++)
if(n%i==0) f++;
if(f==2) return 1;
else return 0;
}
void main()
{
int n,i,count=0;
for(n=4;n<=2000;n+=2)
for(i=3;i<n;i++)
if(isprime(i)==1&&isprime(n-i)==1)
{
cout<<n<<"="<<i<<"+"<<n-i<<" ";
count++;
if(count%5==0) cout<<endl;
break;
}
}
28.可逆素数
求四位的可逆素数。可逆素数即:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。
#include <iostream>
using namespace std;
int isprime(int n)
{
int i,f=0;
for(i=1;i<=n;i++)
if(n%i==0) f++;
if(f==2) return 1;
else return 0;
}
void main()
{
int n,m,g,s,b,q,count=0;
for(n=1000;n<10000;n++)
{
g=n%10;
s=n/10%10;
b=n/100%10;
q=n/1000%10;
m=g*1000+s*100+b*10+q;
if(isprime(n)==1&&isprime(m)==1)
{
cout<<n<<" ";
count++;
if(count%5==0) cout<<endl;
}
}
}
29.回文素数
求不超过1000的回文素数。
#include <iostream>
using namespace std;
int isprime(int n)
{
int i,f=0;
for(i=1;i<=n;i++)
if(n%i==0) f++;
if(f==2) return 1;
else return 0;
}
void main()
{
int n,m,g,s,b,count=0;
cout<<"11"<<" ";
for(n=1;n<1000;n++)
{
g=n%10;
s=n/10%10;
b=n/100%10;
m=g*100+s*10+b;
if(isprime(n)==1&&m==n)
{
cout<<n<<" ";
count++;
if(count%5==0) cout<<endl;
}
}
}
30.百钱买百鸡问题
公元前5世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int j,i,k;
cout<<"公鸡 母鸡 小鸡"<<endl;
for(i=0;i<=20;i++)
for(j=0;j<=33;j++)
{
k=100-i-j;
if((5*i+3*j+k/3==100)&&(k%3==0))
cout<<setw(6)<<i<<setw(10)<<j<<setw(10)<<k<<endl;
}
}
31、爱因斯坦的数学题
爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?
#include <iostream>
using namespace std;
void main()
{
int n=1;
while(!((n%2==1) && (n%3==2) && (n%5==4) && (n%6==5) && (n%7==0)))
n++;
cout<<"台阶数="<<n<<endl;
}
32.换分币
用一元人民币兑换成1分、2分和5分硬币,共有多少种换法?
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int j,i,k;
cout<<"一分 两分 五分"<<endl;
for(i=0;i<=20;i++)
for(j=0;j<=50;j++)
{
k=100-5*i-2*j;
if(k>=0)
cout<<setw(6)<<k<<setw(10)<<j<<setw(10)<<i<<endl;
}
}
33.年龄几何
张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a,d,i;
for(d=1;d<=6;d++)
for(a=1;a<4;a++)
if(4*a+6*d==26&&a*(d+a)*(a+2*d)*(a+3*d)==880)
for(i=0;i<20;i++)
cout<<a+i*d<<setw(4);
cout<<endl;
}
34.求任意两个自然数的最大公约数、最小公倍数。
分别使用辗转相除法;数学上的试探方法完成。
#include <iostream>
using namespace std;
void main()
{
int n,m,gcd,lcm,temp;
cout<<"请输入两个自然数"<<endl;
cin>>n>>m;
if(n<m)
{
temp=n;
n=m;
m=temp;
}
gcd=n;
while(n%gcd!=0 || m%gcd!=0)
{
gcd--;
}
lcm=m;
while(lcm%n!=0 || lcm%m!=0)
{
lcm++;
}
cout<<"最大公约数为:"<<gcd<<endl;
cout<<"最小公倍数:"<<lcm<<endl;
}
8209

被折叠的 条评论
为什么被折叠?



