| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2929 人关注过本帖
标题:[求助][求助][求助][求助]亲和数~
只看楼主 加入收藏
C之Itachi
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-7-16
收藏
 问题点数:0 回复次数:43 
[求助][求助][求助][求助]亲和数~

所谓亲和数就是:
定义数对 (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 的情况。
i对某个范围内的亲和数对的数量非常感兴趣,所以希望你能帮她编写一个程序计算给定范围内的亲和数对的数量。给定一个范围A到B,如果A≤ x ≤ B,则我们称 (x,y)在范围[A,B]内。



我自己写了个~但是结果不对.for下面的while()怎么用.我自己想当然的用的~.....谢谢帮助.
#include <stdio.h>
main()
{
int x,y,i,j,t,sum,n=0,k=0;
printf("请输入两个不相等的数x,y:\n");
scanf("%d%d",&x,&y);
if(x>y)
t=x;x=y;y=t;
for(i=x;i<=y;i++)
for(j=1;j<i;j++)
{
while(i%j==0)
{
sum=n+j;
}
if(sum>i&&sum<=y)

{
k++;
}

}
sum=0;

printf("%d",k);
}


搜索更多相关主题的帖子: 正整数 
2006-09-07 21:12
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
类似完数的问题

倚天照海花无数,流水高山心自知。
2006-09-07 21:19
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用C之Itachi在2006-9-7 21:12:08的发言:

所谓亲和数就是:
定义数对 (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 的情况。
i对某个范围内的亲和数对的数量非常感兴趣,所以希望你能帮她编写一个程序计算给定范围内的亲和数对的数量。给定一个范围A到B,如果A≤ x ≤ B,则我们称 (x,y)在范围[A,B]内。



我自己写了个~但是结果不对.for下面的while()怎么用.我自己想当然的用的~.....谢谢帮助.
#include <stdio.h>
main()
{
int x,y,i,j,t,sum,n=0,k=0;
printf("请输入两个不相等的数x,y:\n");
scanf("%d%d",&x,&y);
if(x>y)
t=x;x=y;y=t;
for(i=x;i<=y;i++)
for(j=1;j<i;j++)
{
while(i%j==0)
{
sum=n+j;
}
if(sum>i&&sum<=y)

{
k++;
}

}
sum=0;

printf("%d",k);
}



倚天照海花无数,流水高山心自知。
2006-09-07 21:32
ww84020209
Rank: 1
等 级:新手上路
帖 子:190
专家分:0
注 册:2006-8-21
收藏
得分:0 
#include "stdio.h"
int main()
{
int A,B,x,i,sum1,sum2;
printf("Input A,B:");
scanf("%d,%d",&A,&B);
if(A>B)
{
int t=A;
A=B;
B=t;
}
for(x=A;x<=B;x++)
{
sum1=0,sum2=0;
for(i=1;i<x;i++)
if(x%i==0)
sum1+=i;
if(sum1>=x||sum1<A||sum1>B)
continue;
for(i=1;i<sum1;i++)
if(sum1%i==0)
sum2+=i;
if(sum2==x)
printf("%d,%d\n",x,sum1);
}
return 0;
}

2006-09-07 21:36
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

#include <stdio.h>

int is_right(int num1,int num2)
{
int i=1,sum=0;
while(i<num1)
{
if(num1%i==0)
{
sum+=i;
}
i++;
}
if(sum==num2)
{
return(1);
}
else
{
return(0);
}
}


int main()
{
int x,y,i,j,t,count=0;

printf("请输入两个不相等的数x,y:");
scanf("%d%d",&x,&y);
if(x>y)
{
t=x;
x=y;
y=t;
}
for(i=x;i<y;i++)
{
for(j=i+1;j<=y;j++)
{
if(is_right(i,j)&&is_right(j,i))
{
count++;
printf("第%d个亲和数对是:<%d,%d>\n",count,i,j);
}
}
}
if(count==0)
{
printf("在%d和%d之间没有亲和数对!\n",x,y);
}

return(0);
}


倚天照海花无数,流水高山心自知。
2006-09-07 21:38
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
效率太低了,当区间较大时,很慢.............

汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-09-07 21:39
ww84020209
Rank: 1
等 级:新手上路
帖 子:190
专家分:0
注 册:2006-8-21
收藏
得分:0 

5楼的效率太低了,[1,10000]间的亲和数等了半天也没算完!
你试试我的,很快!

[此贴子已经被作者于2006-9-7 21:44:01编辑过]


2006-09-07 21:42
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
还是不够快,你的复杂度还是很高的

汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-09-07 21:47
C之Itachi
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-7-16
收藏
得分:0 
4楼的我在win-tc上不能编译成功啊..

2006-09-07 22:01
ww84020209
Rank: 1
等 级:新手上路
帖 子:190
专家分:0
注 册:2006-8-21
收藏
得分:0 

什么错误?


2006-09-07 22:03
快速回复:[求助][求助][求助][求助]亲和数~
数据加载中...
 
   



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

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