亲密数
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 }
以上是关于亲密数的主要内容,如果未能解决你的问题,请参考以下文章