1.求正整数2和100之间的完全数。完全数:因子之和等于它本身的自然数,如6=1+2+3
2.编程求2~n(n为大于2的正整数)中有多少个素数。
#include<iostream>
#include<cmath>
using namespace std;
bool sh(int);
int main(){
int n,i,num=0;
cin >> n;
for(i=2;i<=n;i++){
if(sh(i)==true) num++;
}
cout<<num<<endl;
return 0;
}
bool sh(int i){
for(int x=2; x<=sqrt(i);x++){
if(i%x==0) return false;
}
return true;
}
3.已知 m=max(a,b,c)/(max(a+b,b,c) * max(a,b,b+c)),输入a,b,c,求m。把求三个数的最大数max(x,y,z)分别定义成函数和过程来做。
double mymax(int x,int y,int z){
if(x<y) x=y
if(x<z) x=z
return x;
}
int main(){
double a,b,c,m;
cin >> a >> b >> c;
m = mymax(a,b,c) / (mymax(a+b,b,c)*mymax(a,b,b+c));
printf("%.3lf\n",m);
return 0;
}
4.如果一个自然数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。试求出所有二位绝对素数。
#include<iostream>
#include<cmath>
using namespace std;
bool sh(int i){
for(int x=2; x<=sqrt(i);x++){
if(i%x==0) return false;
}
return true;
}
int main(){
for(int i=10; i<=99; i++){
if(sh(i) == true && sh((i%10*10 + i/10)) == true)
cout << i << endl;
}
return 0;
}
5.自然数a的因子是指能被a整除的所有自然数,但不含a本身。例如12的因子为:1,2,3,4,6。若自然数a的因子之和为b,而且b的因子之和又等于a,则称a,b为一对“亲和数” 。求最小的一对亲和数(a<>b)。
#include<iostream>
using namespace std;
int num(int x){
int sum=0;
for(int i=1; i<=x/2; i++){
if(x%i==0) sum+=i;
}
return sum;
}
int main(){
int i=1;
while(true){
if (num(num(i)) == i && num(i) != i){
cout << i << "和" << num(i) << "是一对儿亲和数" << endl;
break;
}
i++;
}
return 0;
}
6.如果一个数从左边读和从右边读都是同一个数,就称为回文数。例如6886就是一个回文数,求出所有的既是回文数又是素数的三位数。
#include<iostream>
#include<cmath>
using namespace std;
bool sh(int i){
for(int x=2; x<=sqrt(i);x++){
if(i%x==0) return false;
}
return true;
}
int main(){
for(int i=100; i<=999; i++){
if(sh(i) && (i%10) == (i/100)){
cout << i << endl;
}
}
return 0;
}
7.根据公式arctanx(x)=x-x3/3+x5/5-x7/7+…和 pi=6*arctanx(1/sqrt(3)),定义函数arctanx(x),求当最后一项小于10^-6时pi的值。
8.哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6~100所有偶数表示成两个素数之和。