草庐IT

c语言——分解质因数【完整版详细】

姜 猿 2023-04-12 原文

1、质因数是什么?

首先,我们所说的质数就是素数,两种叫法都可以!
如果一个数的因数是质数,那么这个因数就是他的质因数。
比如:
5的因数:1、5 因数5就是5的质因数。
28的因数:4、7 因数7就是28的质因数。

2、什么是分解质因数?

把一个合数用质数相乘的形式表示出来,叫作分解质因数。他强调的是分解的过程
1、合数可以分解质因数,质数不能分解质因数,因为质数只能等于1*本身这种形式,而1不是质数。
2、分解质因数不是一个具体的数,而是把一个合数分解为成几个质数相乘的过程

3、怎么分解质因数?

不妨我们先引入一道编程题

题目:输入你要分解质因数的数的范围,输出每个数分解质因数的因数
输入样例 :
3 10
输出样例:
3=3
4=2 * 2
5=5
6=2 * 3
7=7
8=2 * 2 * 2
9=3 * 3
10=2 * 5

分解质因数的过程

1、我们先以8为例

我们先以最小的质数2开始试
8/2=4此时是不是还能除以2,那么再4/2=2 此时最后2为质数了,这就成为了终止条件,所以8 = 2 * 2 * 2
2、我们再以9为例

还是从2开始试
9/2 无法整除,那么2加1=3,判断3为素数,所以有可能是9的质因数,9/3=3,此时3为质数了,这成为了终止条件所以9 = 3 * 3
2、我们再以10为例

还是从2开始试
10/2=5,5直接为质数,直接达到终止条件,所以10 = 2 * 5
总结:
从2开始作为因子,能整除就一直除,直到最后的结果为质数再终止,那么结果就等于{你要分解的数=之前被除的因子*最后的终止条件(质数)
如果2不能整除了,就往上+1,然后还要判断被+1的数是否为质数,只有他是质数才有作为质因子的必要!然后再让你要分解的数除以这个因子,看是否能整除,不能整除就+1

最后代码如下,详细讲解均在代码块里面!按理来说,质数的分解不算分解质因数过程,但下列代码包括质数的分解,不要产生误解!

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int isprime(int n)
{
	int flag = 1;
	int i = 0;
	for (i = 2; i <= sqrt(n); i++)//别忘了sqrt要引头文件math.h
	{
		if (n % i == 0)
		{
			flag = 0;
			break;
		}
	}
	return flag;
		
}
int main()
{
	//1、用min和max变量确定你要求质因数的数的范围
	//比如输入3 10 就会帮助你求3-10这每个数所能分解的质因数
	int min = 0;
	int max = 0;
	int i = 0;
	int j = 0;
	printf("请输入你想获得质因数的数的范围\n");
	scanf("%d %d", &min, &max);
	//2、写一个判断是否为素数的函数isprime()
	//如果是素数直接写出该素数=该素数
	//如果判断为合数,就要用合数分解质因数的方法。
	for (i = min; i <= max; i++)
	{
		if (isprime(i))
		{//为真则为质数,直接输出
			printf("%d=%d\n", i, i);
		}
		else
		{
	    //既然进了else就说明是合数了
			int tmp = i;//tmp为临时保存i的值,防止i在后面的操作中被改变
			printf("%d=", tmp);
			for (j = 2; j < tmp; j++)
			{//这里j从二开始,因为我此时分解合数,最小的质数是2,所以从2开始
			 //还应注意的是必须是j<tmp,如果多一个=,那还分解什么合数,直接等于本身*1了
				if (isprime(j))
				{//判断是否为质数,因为分解质因数的前提是因子必须为质数的前提下
					while (tmp % j == 0)
					{
						printf("%d*", j);
						tmp /= j;
						if (isprime(tmp))
						{//一直除以质因子,直到有一次除出来结果是质数,说明分解质因数完毕
							printf("%d", tmp);
							break;
						}
					}

				}
			}
			printf("\n");
		}
	}
	return 0;

}

有关c语言——分解质因数【完整版详细】的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  5. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  6. ruby - 如何保持我不常用的编程语言技能 - 2

    关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby​​-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby​​有很大不同。由于我与ruby​​之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?

  7. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  8. ruby-on-rails - 如何通过 URL 更改语言环境? - 2

    在我的双语Rails4应用程序中,我有一个像这样的LocalesController:classLocalesController用户可以通过此表单更改其语言环境:deflocale_switcherform_tagurl_for(:controller=>'locales',:action=>'change_locale'),:method=>'get',:id=>'locale_switcher'doselect_tag'set_locale',options_for_select(LANGUAGES,I18n.locale.to_s)end这有效。但是,目前用户无法通过URL更改

  9. ruby - 一种语言如何被自身解释(如 Rubinius)? - 2

    我使用Ruby编程已经有一段时间了,现在只使用Ruby的标准MRI实现,但我一直对我经常听到的其他实现感到好奇。前几天我在读有关Rubinius的文章,这是一个用Ruby编写的Ruby解释器。我试着在不同的地方查找它,但我很难弄清楚这样的东西到底是如何工作的。我在编译器或语言编写方面从来没有太多经验,但我真的很想弄明白。一门语言究竟如何才能被自己解释?编译中是否有一个我不明白这有意义的基本步骤?有人可以像我是个白痴一样向我解释这个吗(因为无论如何这都不会太离谱) 最佳答案 它比你想象的要简单。Rubinius并非100%用Ruby编

  10. ruby-on-rails - ruby 真的是一种完全面向对象的语言吗? - 2

    Ruby是完全面向对象的语言。在ruby​​中,一切都是对象,因此属于某个类。例如5属于Objectclass1.9.3p194:001>5.class=>Fixnum1.9.3p194:002>5.class.superclass=>Integer1.9.3p194:003>5.class.superclass.superclass=>Numeric1.9.3p194:005>5.class.superclass.superclass.superclass=>Object1.9.3p194:006>5.class.superclass.superclass.superclass.su

随机推荐