231117

使用函数求正整数X以内的所有亲密数对

描述

求正整数X以内的所有亲密数对。若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,且A与B不相等,则称A和B为一对亲密数对。

要求:构建函数便于求出i的因子和,在main函数中调用该函数。

输入

输入一个正整数X

输出

输出正整数X内所有的亲密数对。每一个亲密数对(A,B)占一行,两个数用空格分隔,且A < B。按照亲密数对中A从小到大的顺序输出所有的亲密数对。

首先先写一个判断亲密数的函数

int fri(int n){
	int count=0;
	for(int i=1;i<n;i++){        //因子们
		if(n%i==0){
			count+=i;
		}
	}
	return count;
}

然后再写遍历,出现了一个问题,第一次写的时候用了嵌套的for循环,导致计算量巨大计算机完不成计算

然后想着优化一下,不用那么多for循环,解决方案就是把每个数的fri数记为num,继续遍历数,找到与fri数相等的数,然后输出这个数i和num

问题又出现了,就是会有重复的数,解决方案就是把该num存为a,让i不等于a时再输出

	for(int i=2;i<x;i++){
		num=fri(i);
		if(fri(num)==i&&i!=num&&i!=a){  
			a=num;
			printf("%d %d\n",i,num);
		}
	}

最后的整体代码

#include<stdio.h>
int fri(int n){        //计算因子们
	int count=0;
	for(int i=1;i<n;i++){
		if(n%i==0){
			count+=i;
		}
	}
	return count;
}
int main(){
	int x;
	int num;
	int a;
	scanf("%d",&x);
	for(int i=2;i<x;i++){        //遍历范围内的数
		num=fri(i);                //找出这个数的fri数,并存为num
		if(fri(num)==i&&i!=num&&i!=a){        //判断num的fri数是否等于i,等于就输出
			a=num;
			printf("%d %d\n",i,num);
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值