今晚的月色温柔

导航

相亲数

【问题描述】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");}
}
}
}

posted on 2020-12-12 16:49  1022  阅读(900)  评论(0编辑  收藏  举报