2021-04-12 VSC++: 寻找N以内的亲密数对。(求因子和)
如果a的所有正因子和等于b,b的所有正因子和等于a,因子包括1但不包括本身,且a不等于b,则称a,b为亲密数对。如何解决输出答案重复的问题-编程语言-CSDN问答
int 求因子和(int 数)
{int 和 = 1, 求 = 1, 商 = 0;//因子不含数本身但包含1while (++求 <= (商 = 数 / 求))if (!(数 % 求))和 += 求 + (求 != 商 ? 商 : 0);//std::cout << 数 << ends << "和" << 和 << ";";return 和;
}
void 寻找N以内的亲密数对()
{//缘由https://bbs.csdn.net/topics/399167187int 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/399168406int 和 = 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.5141int 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;
}