【程序功能】 求3000以内的亲密数对. 5

如果A的全部真因子(包括1,不包括A自身)之和等于B;B的全部真因子之和等于A,则称整数A和B为一对亲密数。【编程要求】1.编写函数intfrinum(longs[][2... 如果A的全部真因子(包括1,不包括A自身)之和等于B;B的全部真因子之和等于A,则称整数A和B为一对亲密数。

【编程要求】
1. 编写函数int frinum(long s[][2],long n)实现如下功能:找到2~n分范围内的所有亲密数对,将这些亲密数对保存到s指向的二维数组中。返回函数s数组中存储的亲密数对的对数。
2. 编写函数main 实现以下功能:声明二维数组s和变量n,输入一个正整数并保存到n中,用二维数组s和变量n作为实参调用frinum函数,将n以内的所有的亲密数对输出到屏幕。
【测试数据与运行结果】
输入: n=3000
输出:
(220,284)
(1184,1210)
(2620,2924)
速度快的!谢谢!
展开
 我来答
wjl7851
推荐于2017-11-25 · TA获得超过111个赞
知道答主
回答量:138
采纳率:100%
帮助的人:61.6万
展开全部
#include <stdio.h>
#include <stdlib.h>
int main()
{
long a;
long i,j,sum1,sum2;
long num[100];
int cnt=0,flag;
for(a=2;a<3000;a++) //a从小到大开始遍历
{
flag=0;
sum1=0;
sum2=0;
for(i=1;i<=a/2;i++) //寻找a的约数
if(a%i==0)
sum1+=i; //找到一个约数就加到总和里
for(j=1;j<=sum1/2;j++) //看由约数之和组成的新数的约数
if(sum1%j==0)
sum2+=j; //新数的约数相加
for(i=0;i<cnt;i++)
if(a==num[i])
//若一对相亲数的大一点的数已经找到了,就不用再列出来了
{
flag=1;
break;
}
if(flag==1)
continue;
if(sum2==a && sum1!=a)
//若两个数满足相亲数,且不相等
{
printf("%ld和%ld是一对相亲数\n",a,sum1);
num[cnt]=sum1;
//将第二个相亲数存入数组,防止重复输出
cnt++;
}
}

system("PAUSE");
return 0;
}

这是源程序,直接出结果,懒得改了,楼主看了应该就能明白
sydp2012
2013-09-19
知道答主
回答量:2
采纳率:0%
帮助的人:2.7万
展开全部
#include<iostream>
#define N 3000
using namespace std;
int main()
{
int i, j, n, sum1, sum2;
for (i = 1; i < N; i++)
{
sum1 = 0;
for ( j = 1; j <= i/2; j++)
{
n=i%j;
if (n==0)
{
sum1+=j;
}
}
sum2=0;
for (j=1; j<=sum1/2;j++)
{
n=sum1%j;
if (n==0)
{
sum2+=j;
}
}
if (sum2==i && i<sum1)
{
cout<<i<<"和"<<sum1<<"是一组亲密数"<<endl;
}
}
return 0;
}
结果:(220,284)
(1184,1210)
(2620,2924)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式