| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1460 人关注过本帖
标题:求助:求亲密数对问题
只看楼主 加入收藏
windmh
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-6-15
收藏
 问题点数:0 回复次数:4 
求助:求亲密数对问题
代码如下:
//求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 
2008-06-15 15:20
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
不知道。。。


[color=white]
2008-06-15 16:01
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#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]]
2008-06-15 16:05
windmh
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-6-15
收藏
得分:0 
可我就想知道我这个错在了哪里?
编译能通过,算法好像也行得通,值也肯定有,可怎么....
?????
2008-06-15 16:21
ningyusui
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-1-14
收藏
得分:0 
显然,每次循环时,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;
            }
    }
}

...缩进真不好...不想手工改了...
2008-06-15 16:53
快速回复:求助:求亲密数对问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018445 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved