题目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; }
|
代码可能略有不足,请大佬多多指教