谁能用C++(文件)编一个亲和数,本人急用,编出来有重赏!

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:35:00
文件名为qhs.cpp,所谓亲和数就是:
定义数对 (x,y) 为亲和数对当且仅仅当x、y为不同正整数,且x、y各自的所有非自身正因子之和等于另一个数。例如 (220,284) 和 (280,224) 都是亲和数对,因为:
220的所有非自身正因子之和为:1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
284的所有非自身正因子之和为:1 + 2 + 4 + 71 + 142 = 220
数对 (x,y ) 跟 (y,x) 被认为是同一数对,所以我们只考虑 x<y 的情况。
任 务 :tenshi对某个范围内的亲和数对的数量非常感兴趣,所以希望你能帮她编写一个程序计算给定范围内的亲和数对的数量。给定一个范围A到B,如果A≤ x ≤ B,则我们称 (x,y)在范围[A,B]内。
Hint:[200,1200] 内的数对只有两个,分别是(220,284)和(1184 1210)

我以前用C写了一个,改一下给你参考一下吧。
C++无非就是封装一下而已,没有多大差别的,甚至直接跑C代码也可以。

#define UINT unsigned int

UINT cal(UINT num) /*计算因子和*/
{
UINT sum=1;
int i;
for(i=2;i<num;i++)
{
if(num%i==0)
sum+=i;
}
return sum;
}
int main(int argc, char *argv[])
{
UINT min_num,max_num;
UINT sum=0;
UINT temp=0;
UINT result[100];
int i,j;
printf("\n");
scanf("%d,%d",&min_num,&max_num);
if(min_num>max_num)
{
temp = min_num;
min_num = max_num;
max_num = temp;
}
printf("Range[%d-%d]\n",min_num,max_num);
result[0]=0;
for(i=min_num;i<=max_num;i++)
{
temp = result[0];
sum=cal(i);
if((cal(sum)==i) && (sum!=i))
{
for(j=1;j<temp<<1+2;j++)
if(result[j]==sum){goto loop;}//剔除