如果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;
}