亲密数

Posted 618zyk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了亲密数相关的知识,希望对你有一定的参考价值。

如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。

我们只要确定一个数A,找出数A的因子并求和,再求出和的因子,并相加并判断是否等于数A即可求出亲密数。

 

#include<iostream>
using namespace std;
int main()

int x,y;
cout<<"3000以内的全部亲密数为:"<<endl;
for(int i=1;i<3000;i++)//该循环用于穷举3000以下的数

x=0;
for(int j=1;j<i;j++)//该循环用于求出i的因子并进行相加

if(i%j==0)

x+=j;


y=0;
for(int k=1;k<x;k++)//该循环用于找出i的因子之和的因子

if(x%k==0)

y+=k;


if(i==y&&x<y)//条件判断找出亲密数

cout<<x<<"和"<<y<<"是一对亲密数"<<endl;


return 0;

运行结果如下:

 

算法15---数论2---亲密数

算法16---数论2---亲密数

如果整数a的因子和等于整数b,整数b的因子和等于整数a,因子包括1但不包括本身,且a不等于b,则称a和b为亲密数对。

  1 /*
  2     题目:亲密数
  3     author taoliu——alex  2016.10
  4 
  5     主要实现两种
  6     1 判断两个数是不是亲密数。
  7     2 找出一定范围内的亲密数。
  8 
  9 */
 10 
 11 
 12 #include <stdio.h>
 13 #include <stdlib.h>
 14 
 15 int  friendnum(int a,int b);
 16 int factor_sum(int n);
 17 void scope_friendnum(int scope);
 18 
 19 //判断两个数是不是亲密数。
 20 
 21 int  friendnum(int a,int b)
 22 {
 23     if (a==b)
 24     {
 25         return -1;
 26     }
 27     int a_sum=0;
 28     int b_sum=0;
 29     a_sum=factor_sum(a);
 30     b_sum=factor_sum(b);
 31     //printf("the factor sum of %d is %d\n",a,a_sum);
 32     //printf("the factor sum of %d is %d\n",b,b_sum);
 33     if ((a_sum==b)&&(b_sum==a))
 34     {
 35         return 1;
 36     }
 37     else
 38     {
 39         return 0;
 40     }
 41 
 42 }
 43 
 44 int factor_sum(int n)
 45 {
 46     int sum=0;
 47     for (int i = 1; i < n/2+1; i++)
 48     {
 49         if (n%i==0)
 50         {
 51             sum=sum+i;
 52         }
 53     }
 54     return sum;
 55 }
 56 
 57 // 找出一定范围内的亲密数。
 58 void scope_friendnum(int scope)
 59 {
 60     for (int i = 1; i < scope; i++)
 61     {
 62         for (int j = i; j < scope; j++)
 63         {
 64             int ans=friendnum(i,j);
 65             if(ans==1)
 66                 printf("%d and %d is friendnum\n",i,j);
 67         }
 68     }
 69 }
 70 
 71 
 72 int main()
 73 {
 74     int judge;
 75     int a,b,scope;
 76     printf("what you want to do :  0 means judge two number is friendnum or not;\n");
 77     printf(" 1 means you want to find the friendnum in scope\n");
 78     //fflush(stdin);
 79     scanf("%d",&judge);
 80     if (judge==0)
 81     {
 82         printf("input two number you want to judge!\n");
 83         //fflush(stdin);
 84         scanf("%d%d",&a,&b);
 85         int ans=friendnum(a, b);
 86         if (ans==1)
 87         {
 88             printf("%d and %d is friendnum\n",a,b);
 89         }
 90         if (ans==0)
 91         {
 92             printf("%d and %d is not friendnum\n",a,b);
 93         }
 94         else
 95             printf("%d and %d is the same number ,error!\n", a,b);
 96     }
 97     if (judge==1)
 98     {
 99         printf("input the scope you want to find\n");
100         //fflush(stdin);
101         scanf("%d",&scope);
102         scope_friendnum(scope);
103     }
104     return 0;
105 }

 

以上是关于亲密数的主要内容,如果未能解决你的问题,请参考以下文章

亲密数

亲密数对递归求逆

5.20亲密数

亲密数

C语言试题六十八之请编写函数实现亲密数

C语言试题六十八之请编写函数实现亲密数