首页 > 编程语言 >c++一个数因子和(快速求解)

c++一个数因子和(快速求解)

时间:2024-09-06 21:55:19浏览次数:11  
标签:商数 cout 求解 int 整数 ++ 因子 c++ 除数

void 一个数因子和(int 整数)
{//缘由https://ask.csdn.net/questions/1054457#answer_1251715
	int he = 0, j = 0; string a = "";
	while (++j < 整数)if (!(整数%j))he += j, a += to_string(j) + "+";
	cout << a << "的因子和:" << he << endl;
}

	int a = 0; cout << "输入一个整数:"; cin >> a;	一个数因子和(a);

还真是不比贴主的快,引起我认真审题,修改一下,比贴主更快。循环到整数的二分之一速度快,但是求二分之一要放到循环外预先计算。还可以继续优化到更快。

void 一个数因子和(int 整数 = 44)
{//缘由https://ask.csdn.net/questions/1054457#answer_1251715
	int he = 0, j = 1, jj = 整数 / 2; string a = "";
	while (j < jj)if (!(整数%j))he += j, a += to_string(j) + "+", ++j; else ++j;
	cout << 整数 << "=>" << a << "的因子和:" << he << endl;
}

一个数的因子集合是能被整除的除数与商数的集合。 

void 快速数因子和(int& jj, int 整数 = 447744774)
{//一个数的因子集合是能被整除的除数与商数的集合。缘由https://ask.csdn.net/questions/1054457#answer_1251715
	unsigned long int 和 = 0, 除数 = 1, 商数 = 整数, 开方 = sqrt(整数); string 观察 = "";
	while (++除数 < 商数 && 除数 <= 开方)
	if (!(整数 % 除数))
	{
		和 += 除数 + (商数 = 整数 / 除数),
		观察 += to_string(除数) + "+",
		观察 += to_string(商数) + "+";
		if (除数 + 除数 >= 商数){ ++jj; 观察 += "☆"; break; }
	}
	cout << 整数 << "=>" << 观察 << "的因子和:" << (和 += 1) <<ends<<jj<< endl;//if (和 == 整数)
}

	int aa = INT_MAX - 1, j = 1111111, 起始 = 44, 结束11 = 1111799, jj = 0;
	while ((j += 2) < 结束11)if (j >= 起始&&判断素数(j))cout << j << ends;
	while (j++ < 结束11)快速数因子和(jj,j);
	快速数因子和(jj, aa);

完美数的确用开方作为结束比较快,优化的地方我没错,问题出在结束用商,对于某些数是不适合的,这一点也注意到了,尤其是遇到质素时,正好这个做了个验证。很多数用商是比较接近开方的。
	//int 整数 = 9999;
	//while (--整数)
	//{
	//	int 和 = 1, 除数 = 1, 商数 = 整数, 开方 = sqrt(整数);
	//	while (++除数 <= 开方){if (!(整数 % 除数))和 += 除数 + (整数 / 除数);if (除数 + 除数 >= 商数)break;/*虽然这个判断只有20%命中率也算是个小优化可减少循环次数*/}
	//	if (和 == 整数)cout << 整数 << ends;//
	//}

标签:商数,cout,求解,int,整数,++,因子,c++,除数
From: https://blog.csdn.net/xianfajushi/article/details/104324329

相关文章

  • C++初学(19)
    19.1、文本IO如果你需要写入一千份以上的数据,如果手打那可太浪费时间了。这种情况下,应该让程序直接读取文件;同样的,让程序将输入写入到文件也是更加方便。文本I/O的概念:使用cin进行输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。无论目标数据类型是什么,输......
  • C++入门基础(类和对象)
    7.类和对象1.面向对象和面向过程的区别面向对象:是将事务抽象成类和对象,以对象为中心,通过对象的交互实现程序的功能,可维护性强面向过程:是将复杂问题一步步拆分,通过依次执行来解决问题,可维护性比较弱2.类大小的计算1.内存对齐考虑内存对齐的默认大小vs默认是8字......
  • C++入门基础
    6.C++入门基础1.函数重载1.什么是函数重载函数重载是实现C++多态的一个重要技术,是在同一作用域内相同函数名因为参数的类型不同或者个数不同或者都不同构成重载2.C++是如何支持函数重载的1.命名改变根据对应的参数类名改成比如voidfoo(int)voidfoo(double)_fo......
  • Modern C++——使用分支预测优化代码性能
    大纲[[likely]][[unlikely]]样例应用场景题外参考代码参考资料在C++20中,新引入了一对属性关键字[[likely]]和[[unlikely]],它们用于为编译器提供关于代码分支执行概率的额外信息,以帮助编译器进行更好的优化。这对属性是基于长期实践中开发人员对程序执行路径的深入理解......
  • 枚举: C++和Python实现鸡兔同笼问题
    作者制作不易,关注、点赞、收藏一下吧!目录1.Python实现2.C++实现1.Python实现首先,我们需要输入头和脚的数量:head=int(input("请输入头的数量:"))feet=int(input("请输入脚的数量:"))input()实现输入,int()实现把字符串型(str)换为整型(int)。然后,进行循环......
  • c++的面向过程与面向对象
    面向过程与面向对象面向过程:在编程时重点考虑如何解决问题,以及解决问题的具体步骤。面向对象:在编程时重点考虑的是"谁"能解决问题(类、结构),以及"它"解决问题时所需要属性(成员变量)和功能(成员函数)。抽象:把“解决问题者”当作思考或观察对象,把解决问题所需的具备的属性和功能......
  • c++的类和对象
    类和对象什么是类把抽象结果(利用面向对象的思维模式,思考、观察出的结果),使用用C++的语法封装出一种类似结构的自定义数据类型(复合数据类型)。如何设计类struct结构名{  成员函数;//结构的成员默认访问权限是public  成员变量;};​class类名{  成员......
  • 修复Microsoft Visual C++ 2015中msvcp140_ATOMIC_WAIT.dll缺失的5大策略
    在电脑使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140_ATOMIC_WAIT.dll丢失”。这个错误提示通常出现在运行某些程序或游戏时,给使用者带来了很大的困扰。那么,如何解决这个问题呢?一,原因分析msvcp140_ATOMIC_WAIT.dll是MicrosoftVisualC++2015运行时库的一部......
  • C++常见知识掌握
    1.Linux软件开发、调试与维护内核与系统结构Linux内核是操作系统的核心,负责管理硬件资源,提供系统服务,它是系统软件与硬件之间的桥梁。主要组成部分包括:进程管理:内核通过调度器分配CPU时间给各个进程,实现进程的创建、调度、终止等操作。使用进程描述符(task_struct)来存储进程......
  • 信奥赛C++老师解一本通题:1182:合影效果
    ​【题目描述】小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?【输入】第一行是人数nn(2≤n≤......