首页 > 编程语言 >c++质因数分解

c++质因数分解

时间:2024-09-03 19:50:27浏览次数:7  
标签:因数分解 int 质数 namespace c++ using include cout

质因数分解,最先想到了遍历1-n,找出既是质数也是因数的数。

需要用到判断质数函数、while循环,复杂度三次方以上了。

虽然比较慢,但是能做数学题。

#include<iostream>
using namespace std;
bool zs(int n) {
	for (int i = 2; i <= n / 2; i++) {
		if (n % i == 0) {
			return 1;
		}
	}
	return 0;
}
int main() {
	long long n, cnt = 0;
	cin >> n;
	cout << n << "=";
	while (n != 1) {
		for (int i = 2; i <= n; i++) {
			if (!zs(i)) {
				while (n % i == 0) {
					n = n / i;
					if (cnt == 0) {
						cout << i;
						cnt++;
					} else {
						cout << "*" << i;
						cnt++;
					}
				}
			} else {
				continue;
			}
		}
	}
	return 0;
}

第一步优化:实际上,不用判断质数,因为该除的前面也除掉了,所以可以把质数判断删掉。

#include<iostream>
using namespace std;
int main() {
	long long n, cnt = 0;
	cin >> n;
	cout << n << "=";
	while (n != 1) {
		for (int i = 2; i <= n; i++) {
			while (n % i == 0) {
				n = n / i;
				if (cnt == 0) {
					cout << i;
					cnt++;
				} else {
					cout << "*" << i;
					cnt++;
				}
			}
		}
	}
	return 0;
}

第二步优化:前面的代码写i<=n是因为怕这个数是质数,但我们只需写i*i<=n就行,结尾加n大于1的判断,就能进一步优化。

#include <iostream>
using namespace std;
int main() {
	int n;
	cin >> n;
	cout << n << "=";
	if (n == 1) {
		cout << 1;
		return 0;
	}
	int flag = 0;
	for (int i = 2; i * i <= n; i++) {
		if (n % i == 0) {
			int cnt = 0;
			while (n % i == 0) {
				n = n / i;
				cnt++;
			}
			if (flag == 1) {
				cout << "*";
			}
			if (cnt == 1) {
				printf("%d", i);
			} else {
				printf("%d^%d", i, cnt);
			}
			flag = 1;
		}
	}
	if (n > 1) {
		if (flag == 1) {
			cout << "*";
		}
		printf("%d", n);
	}
	return 0;
}

标签:因数分解,int,质数,namespace,c++,using,include,cout
From: https://blog.csdn.net/xhbqy/article/details/141870176

相关文章

  • C++学习笔记(大白话版)
     函数重载:名字一样,参数不一样 同一个小区,不同的家庭在小区中住不同的房子 缺省参数:写函数的时候故意不把参数写完,但是只能不写左边的,右边的必须写 如果在使用有缺省参数的函数时,给了实参值,那么就优先调用实参值 如果没有给实参,就可以用默认参数了。 函数定......
  • C++实现 || 敲桌子小游戏
    这是一个在聚会和酒桌上常玩的一个小游戏。游戏规则所有人围着桌子一个大圈,从“1”开始喊,遇到7、7的倍数或是带7的数字,就敲一下桌子(酒桌上用筷子敲下杯子),以此类推。一旦有人做错了就要接受惩罚。实现思路我们建立一个for循环,让变量在其中不断递增。在循环体内部,我们对变量进行判断,......
  • 【C++】类和对象2:默认成员函数+操作符重载
    本篇是类和对象的第二站......
  • 配置vscode中C&C++编译环境
    配置vscode中C&C++编译环境参考文章链接在文末。Win10系统。本文可能不太适合完全小白的同学参考学习...如果你在配置中遇到了什么问题,可以看一看,或许我能为你提供解决方案。一、卸载VScode,删除之前的配置这一步主要是因为本人之前一直在用vscode,但是各种扩展的使用混乱不堪......
  • C++ 设计模式——解释器模式
    目录C++设计模式——解释器模式1.主要组成成分2.逐步构建解释器模式步骤1:定义抽象表达式步骤2:实现终结符表达式步骤3:实现非终结符表达式步骤4:构建语法树步骤5:实现内存管理步骤6:创建上下文和客户端3.解释器模式UML图UML图解析4.解释器模式的优点5.......
  • C++ 设计模式——设计模式总结
    目录C++设计模式——设计模式总结1.面向对象程序设计的几个原则2.设计模式的分类3.设计模式的定义3.1创建型设计模式的定义3.2结构型设计模式的定义3.3行为型设计模式的定义4.重要提示C++设计模式——设计模式总结设计模式是软件设计中常见问题的典型解决......
  • 在Linux中使用C++调用Python程序
    为什么要用C++调Python我们训练部署CNN模型时,服务器用Pytorch测试的精度比我们部署端精度高0.5%。经过多方排查,发现是由于Pytorch预处理图片使用PIL进行图片读取和尺寸调整,但是部署端采用OpenCV进行图片读取和尺寸调整。两种实现方式实现的Resize操作差异非常大。为了快速完成项......
  • windows C++ 并行编程-并发的异常处理(三)
    并发运行时使用C++异常处理来传达多种错误。这些错误包括:无效使用运行时、无法获取资源等运行时错误,以及你提供给任务和任务组的工作函数中发生的错误。当任务或任务组引发异常时,运行时会保存该异常并将其编组到等待任务或任务组完成的上下文。对于轻量级任务和代理等组件......
  • 【最新原创毕设】基于微信小程序的老年人健康医疗信息服务平台设计+24246(免费领源码)可
    摘 要老年人健康是社会关注的重点之一,随着我国人口老龄化程度的增加,老年人的健康问题逐渐凸显。为了更好地满足老年人的健康需求,提高医疗服务质量和效率,开发一个基于SpringBoot的老年人健康医疗信息服务平台是十分必要的。老年人健康医疗信息服务平台利用Java语言,通过spring......
  • windows C++ 并行编程-并发的异常处理(二)
    并发运行时使用C++异常处理来传达多种错误。这些错误包括:无效使用运行时、无法获取资源等运行时错误,以及你提供给任务和任务组的工作函数中发生的错误。当任务或任务组引发异常时,运行时会保存该异常并将其编组到等待任务或任务组完成的上下文。对于轻量级任务和代理等组件......