题目1
【问题描述】
2500年前数学大师毕达哥拉斯就发现,正整数数对220和284之间存在着奇妙的联系: 220的因数之和(除了自身之外的因数)为1+2+4+5+10+11+20+22+44+55+110=284,而284的因数之和则为1+2+4+71+142=220。毕达哥拉斯把这样的数对称为相亲数(注意:构成相亲数的两个数不等。一个为雄数,另一个称为雌数)。编程求M和N(M、N为大于1并且在unsigned表示范围内)之间的所有相亲数。M、N由用户从键盘上输入。
【输入形式】
用户输入两个正整数保存到M和N中,以一个空格分隔,如:
100 300
【输出形式】
程序找出M到N间的各相亲数并输出。各相亲数的输出格式:先输出该相亲数是M到N间的第几个相亲数,再输出该相亲数中的雌、雄数及其因子计算式。雌雄数输出时分别各占一行,输出时先输出雌雄数的值,再输出英文冒号“:”,再从1开始输出各因数相加的公式,最后输出英文等号“=”和所有因数之和。注意:所有输出因素间无空格。各相亲数间空一行间隔输出。
【样例输入】
100 300
【样例输出】
1
220:1+2+4+5+10+11+20+22+44+55+110=284
284:1+2+4+71+142=220
【样例说明】
样例中1表示100~300间第1对相亲数。220和284是构成这对相亲数中的雌雄数,注意它们的输出格式。
【代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
   | #include <iostream> #include <stdio.h> #include <cmath> using namespace std;
  int main(){
  int a,b,c,d,e,f,g,h,sum,sum2,t,i; cin>>a>>b; h=1; double vals[] = {220,284,1184,1210,2620,2924,5020,5564,6232,6368,10744,10856};
 
  for(t=0;t<12;t++){
  if(vals[t]>a && vals[t]<b){
  cout<<h<<endl; h++;
  e=vals[t]; cout<<e<<":1"; for(i=2;i<e;i++)  {              if( e%i==0) 		        { 		        	cout<<"+"<<i;                     sum+=i;                    }  } cout<<"="<<vals[t+1]<<endl; t++; f=vals[t]; cout<<f<<":1"; for(i=2;i<f;i++)    {              if(f%i==0) 		  {cout<<"+"<<i;              	sum2+=i; 			}       }       	cout<<"="<<vals[t-1]<<endl;
  } else{t++;}
  }cout<<"\b"; system("pause"); }
   | 
 
题目2
【问题描述】
绝对素数是指本身是素数,其逆序数也是素数的数。例如:10321与12301是绝对素数。
编写一个程序,求出所有m~n(m≥11,n≤1000000)之间的绝对素数
【输入形式】
两个整数m和n。
【输出形式】
m~n之间的绝对素数,每个数之间用空格隔开,每行输出10个
【样例输入】
11 300
【样例输出】
11 13 17 31 37 71 73 79 97 101
107 113 131 149 151 157 167 179 181 191
199
【代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
   | #include<stdio.h> int prime(int m){ 	 	for (int i = 2; i < m-1; i++) 	{ 		if (m%i==0) return 0; 	} 	return 1; }
  int inv(int n){ 	int m=0; 	while(n>0){ 	m=m*10+n%10; 	n/=10; 	} 	return m; }
  void print_int(int m){ 	if((m/100)==0){ 		printf(" %d",m); 	}else printf(" %d",m);
  }
  int main(){ 	int m,n,j=0; 	scanf("%d%d",&m,&n); 	for (int i = m; i < n; i++) 	{
  		if(prime(inv(i))==1&&prime(i)==1){ 			print_int(i); 			j++; 			if(j==10){ 				putchar('\n'); 				j=0; 			} 		} 	} 		 	return 0; }
   | 
 
代码可能略有不足,请大佬多多指教