写在前面:
摘录自网络,标明出处
人和人之间讲友情,有趣的是,数与数之间也有相类似的关系,数学家把一对存在特殊关系的数称为“亲和数”
常言道,知音难觅,寻找亲和数更使数学家绞尽了脑汁
亲和数是数论王国中的一朵小花,它有漫长的发现历史和美丽动人的传说
毕达哥拉斯曾说:“朋友是你灵魂的倩影,要像220与284一样亲密”
——bia度百科
by RussianKolz
定义
亲和数,又称相亲数、友爱数、友好数,指两个正整数中,彼此的全部约数之和(本身除外)与另一方相等 亲和数是一种古老的数 在遥远的古代,人们发现某些自然数之间有特殊的关系:如果两个数a和b,a的所有除本身以外的因数之和等于b,b的所有除本身以外的因数之和等于a,则称a,b是一对亲和数 首先发现220与284就是一对亲和数,在以后的1500年间,世界上有很多数学家致力于探寻亲和数,面对茫茫数海,无疑是大海捞针,虽经一代又一代人的穷思苦想,有些人甚至为此耗尽毕生心血,却始终没有收获 公元九世纪,伊拉克哲学、医学、天文学和物理学家泰比特·依本库拉曾提出过一个求亲和数的法则,因为他的公式比较繁杂,难以实际操作,再加上难以辨别真假,故它并没有给人们带来惊喜,或者走出困境,数学家们仍然没有找到第二对亲和数 十六世纪,已经有人认为自然数里就仅有这一对亲和数。有一些无聊之士,甚至给亲和数抹上迷信色彩或者增添神秘感,编出了许许多多神话故事。还宣传这对亲和数在魔术、法术、占星术和占卦上都有重要作用等等,直到费尔马发现了另一对亲和数:17296和18416
——bia度百科 |
实现
根据定义写的六亲不认暴力筛法
C++:
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 int const maxNum(10000); 6 int num_1,num_2; 7 8 int divSum(int x) 9 { 10 int sum=0; 11 for(int i=1;i<x;++i) 12 if(x%i==0) sum+=i; 13 return sum; 14 } 15 16 int main(int argc,char *argv[],char *enc[]) 17 { 18 for(int num_1=1;num_1<=maxNum;++num_1) 19 { 20 num_2=divSum(num_1); 21 if(num_1!=num_2 && num_1==divSum(num_2)) 22 printf("%d %d\n",num_1,num_2); 23 } 24 25 return 0; 26 }
Java:
1 import java.util.Scanner; 2 3 class Pony 4 { 5 static int maxNum=10000; 6 static int num_1,num_2; 7 8 static int divSum(int x) 9 { 10 int sum=0; 11 for(int i=1;i<x;++i) 12 if(x%i==0) sum+=i; 13 return sum; 14 } 15 16 public static void main(String[] args) throws Exception 17 { 18 for(int num_1=1;num_1<=maxNum;++num_1) 19 { 20 num_2=divSum(num_1); 21 if(num_1!=num_2 && num_1==divSum(num_2)) 22 System.out.println(String.format(num_1+" "+num_2)); 23 } 24 } 25 }