2021-04-12 VSC++: 寻找N以内的亲密数对。(求因子和)

如果a的所有正因子和等于b,b的所有正因子和等于a,因子包括1但不包括本身,且a不等于b,则称a,b为亲密数对。如何解决输出答案重复的问题-编程语言-CSDN问答

int 求因子和(int 数)
{
	int 和 = 1, 求 = 1, 商 = 0;//因子不含数本身但包含1
	while (++求 <= (商 = 数 / 求))
		if (!(数 % 求))
			和 += 求 + (求 != 商 ? 商 : 0);
	//std::cout << 数 << ends << "和" << 和 << ";";
	return 和;
}
void 寻找N以内的亲密数对()
{//缘由https://bbs.csdn.net/topics/399167187
	int a = 1, aa = 0, n = 0;
	std::cin >> n;
	while (++a <= n)
		if (求因子和((aa = 求因子和(a))) == a && a != aa && a < aa)
			std::cout << "亲密数对" << a << ends << aa << endl; else ;
	//if (求因子和(a) == 求因子和(aa++) && 求因子和(a) > 1 && 求因子和(aa - 1) > 1)//限制因子和都为1
	//	std::cout << "亲密数对" << a << ends << aa << endl;
}


	int a = 220, aa = 6000, yh = 0;
	std::cin >> aa;
	while (a <= aa)
	{
		yh = 求因子和(a);
		if (a == 求因子和(yh) && a < yh) std::cout << a << "\t" << yh << "\n"; else;
		a += 2;
	}

int 求因子个数(int 数)
{//缘由https://bbs.csdn.net/topics/399168406
	int 和 = 0, 求 = 1, 商 = 0;//因子不含1和数本身
	while (++求 <= (商 = 数 / 求))
		if (!(数 % 求))
			和 += (求 != 商 ? 2 : 1);
	return 和;
}



	int a = 0, n = 0;
	cin >> n;
	while (++a <= n)
		cout << 求因子个数(a) << endl;

2021-12-26缘由c语言——亲和数的范围求取-编程语言-CSDN问答,采用数组最后输出可减少测试用例时间,10的6次方测试4秒左右。

void 因子和亲密数()
{//缘由https://ask.csdn.net/questions/7565396?spm=1005.2025.3001.5141
	int a = 2, aa = 1000000, yh = 0, yhj[474][2]{}, x = 0;
	//std::cin >> aa;
	while (a <= aa)
	{
		yh = 求因子和(a);
		if (a == 求因子和(yh) && a < yh)
			yhj[x][0] = a, yhj[x++][1] = yh/*, std::cout << a << "," << yh << "\n"*/; else;
		a += 2;
	}
	a = 0;
	while (a < x)std::cout << yhj[a][0] << "," << yhj[a][1] << "\n", ++a;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值