当前位置: 代码迷 >> C语言 >> 求助:求亲密数对问题
  详细解决方案

求助:求亲密数对问题

热度:642   发布时间:2008-06-15 15:20:14.0
求助:求亲密数对问题
代码如下:
//求1000以内的亲密数对,亲密数对的定义为:若正整数A的所有因子(不包括A)之和
//为B,B的所有因子(不包括B)之和为A,且A!=B,则称A与B为亲密数对。
//如:220的因子之和 1+2+4+....+110=284
//    284的因子之和 1+2+....+142=220
#include "stdafx.h"
#include "iostream.h"
void main()
{
    int x,y;
    int i,j;
    int sum1=0,sum2=0;
    for(x=1;x<=1000;x++)
    {
        for(i=1;i<x;i++)
        {
            if(x%i==0)
                sum1+=i;
        }
            for(y=1;y<=1000;y++)
            {
                for(j=1;j<y;j++)
                {
                     if(y%j==0)
                         sum2+=j;
                }
                if(x==sum2 && y==sum1 && x!=y)
                    cout<<x<<"和"<<y<<"是亲密对数"<<endl;
            }
    }
}
请问错在了哪里?
搜索更多相关的解决方案: 亲密  之和  int  include  

----------------解决方案--------------------------------------------------------
不知道。。。


[color=white]
----------------解决方案--------------------------------------------------------
/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http://yzfy.org **
*****************************************************************/
#include <iostream>
using namespace std;

unsigned Sqrt(unsigned n)
{
   
#define LOWER_POS(x) for(;nl<nr;nm=(nl+nr+1)>>1)\
        
if((x)>n)nr=nm-1;else nl=nm;
    unsigned nl=0, nr=31, nm=15;
    LOWER_POS(1u<<nm);
    nm=n>>(nm>>1); nl=nm>>1;nr=nm+nl;
    LOWER_POS(nm*nm);
    #undef LOWER_POS
   
return nm;
}
unsigned SumOfDivisor(unsigned n)
{
   
unsigned e=Sqrt(n+1),s=0,t=2;
    for(;t<e;++t)
        if(n%t==0) s+=t+n/t;
    if(n%t==0) s+=t;
    return s+1;
}
int main()
{
   
for(unsigned x=1;x<=10000;x++)
    {
        
unsigned x1=SumOfDivisor(x);
        if(x<x1 && SumOfDivisor(x1)==x)
        {
            
cout<<x<<' '<<x1<<endl;
        }
    }
   
return 0;
}


重新写一个我会


[color=white]

[[it] 本帖最后由 Loli 于 2008-6-15 17:09 编辑 [/it]]
----------------解决方案--------------------------------------------------------
可我就想知道我这个错在了哪里?
编译能通过,算法好像也行得通,值也肯定有,可怎么....
?????
----------------解决方案--------------------------------------------------------
显然,每次循环时,sum1,sum2没有置0,
改了的代码如下:
#include "iostream.h"
int main()
{
    int x,y;
    int i,j;
    int sum1=0,sum2=0;
    for(x=1;x<=1000;x++)
    {
        sum1=0;
        for(i=1;i<x;i++)
        {
            if(x%i==0)
                sum1+=i;
        }
            for(y=1;y<=1000;y++)
            {
                sum2=0;
                for(j=1;j<y;j++)
                {
                     if(y%j==0)
                         sum2+=j;
                }
                if(x==sum2 && y==sum1 && x!=y)
                    cout<<x<<"和"<<y<<"是亲密对数"<<endl;
            }
    }
}

...缩进真不好...不想手工改了...
----------------解决方案--------------------------------------------------------
  相关解决方案