相亲数
【问题描述】2500年前数学大师毕达哥拉斯就发现,220和284两数之间存在着奇妙的联系:
220的因数之和(除了自身之外的因数)为:1+2+4+5+10+11+20+22+44+55+110=284,284的因数之和为:1+2+4+71+142=220。
毕达哥拉斯把这样的数对称为相亲数。输入两个正整数(大于1并且在int的表示范围之内),分别计算它们所有因数之和(除了自身之外的因数),并判断它们是否是一对相亲数。
【输入形式】从标准输入输入两个正整数,以一个空格分隔这两个正整数。
【输出形式】以输入的先后顺序分行输出:输入的正整数,后跟英文逗号",",再从1开始输出其因数相加的公式(最大的因数之后没有加号),最后输出英文等号"="和因数之和。注意:所有输出元素间无空格。若它们是一对相亲数,则在新的一行上输出1;若不是则在新的一行上输出0。
【样例输入】220 284
【样例输出】
220,1+2+4+5+10+11+20+22+44+55+110=284
284,1+2+4+71+142=220
1
#include <iostream>
using namespace std;
int main(){
int a,b,c,d;
int i;
int sum=0;
int item=0;
cin>>a>>b;
cout<<a<<",";
cout<<"1";
for(i=2;i<a;i++){
if(a%i==0){
cout<<"+"<<i;
sum+=i;
}}
cout<<"="<<sum+1<<endl;
cout<<b<<",";
cout<<"1";
for(i=2;i<b;i++){
if(b%i==0){
cout<<"+"<<i;
item+=i;
}}
cout<<"="<<item+1<<endl;
if(a==item+1){
cout<<"1";
}else{
cout<<"0";
}
return 0;}
java代码:
package fuxi;
import java.util.Scanner;
public class W {
public static int get(int n)
{int s=1;
System.out.print(n+",1");
for(int i=2;i<n;i++)
{
if(n%i==0)
{System.out.print("+"+i);
s+=i;
}
}
System.out.println("="+s);
return s;
}
public static void main(String[] args) {
{int a,b,sum1,sum2;
Scanner sc=new Scanner(System.in);
a=sc.nextInt();
b=sc.nextInt();
sum1=get(a);
sum2=get(b);
if(a==sum2&&b==sum1)
{
System.out.println("1");}
else
{System.out.println("0");}
}
}
}