线程优化大赛7月的题目-相亲数!
对于一对不相同的整数,如果其中一个整数的正约数(proper divisors)之和等于第二个整数,且反之亦然,那么这对整数便可称之为一对“相亲数”(amicable numbers)。
示例:220, 284
220=2^2*5*11 (1+2+4+5+10+11+20+22+44+55+110 = 284)
284=2^2*71 (1+2+4+71+142 = 220)
请考虑一个自然数的各约数之和与该数本身的比率,即 R(n)。如果两个不相同的自然数的比率相等,那么这样的数称为一对“亲和数”(friendly numbers)。
示例:30, 140
R(30) = (1+2+3+5+6+10+15+30)/30 = 12/5
R(140) = (1+2+4+5+7+10+14+20+28+35+70+140)/140 = 12/5
问题:编写一个线程应用程序来查找并打印出每一对相亲数与亲和数,它们均在给定的输入范围内。在应用程序开始执行时,这个范围(两个正整数)会以命令行参数的形式赋予该应用程序。
输入与输出示例:
> amicable.exe 200 600
220 和 284 是相亲数
240 和 600 是亲和数
限制:不可以将直接知识或信息编码到源文件或应用程序使用的辅助文件中。例如,不可以使用质数(prime numebrs)表或是相亲数或亲和数列表。所有这些信息都必须由应用程序在运行时生成。
计时:以时钟时间(Wall-clock time)为准(包括输入输出时间,即I/O时间)