2021-10-24

Project Euler-003-最大质因数

在这里插入图片描述因数:AxB=C,则称A,B为C的因数。
质(素)数:一个除了能被1和他自身外,不能被其他自然数整除的自然数。
合数:与质数相对,除了1和他自身之外,还能被其他自然数整除的自然数。

思路:我们可以任何一个数都看成一系列素数相乘的形式,即A=p1a1 x p2a2 x p3a3 x …,例如12 = 21 x 6 1 = 22 x 31。所以我们发现,任何一个数都能被表示成这种形式(为什么可以表示成这种形式?其实这正是质数的排列组合,详情请移步知乎搜索。),那么他的最大质因数正是这里面最大的一个质数,如12的最大质因数正是3。
所以我们首先要找到给定数字内的所有质数,从2开始(1无影响,直接跳过即可),找到一个质数,就从给定数中除掉,直到最后剩下的那一个质数,便是其最大质因数。

#include <stdio.h>
//最大质因数 解题思路,把每次找到的最小质因数除掉,最后剩下的质因数便是最大的 
int main(int argc, char *argv[]) {
	int num = 1;
	printf("请输入所要进行计算的数字:");
	scanf("%d",&num);
	int x=2,ans = 0;
	while (num != 1){
		while (num % x !=0){    //num % x != 0寻找的是无关项,所以就直接加一即可 
			printf("无关项:%d\n",x); 
			x++;	
		}
		ans = x;    
		printf("x 赋给了 ans = %d\n",ans);            //上面的while循环在找到最小质因数后自动退出,留下的x正是最小质因数,我们把x的值赋给ans,以便x去计算新的最小质因数 
		while (num % x == 0){
			num /= x; 
			printf("new_num = %d\n",num);    				//把x从num中除掉 ,采用循环是为了防止有时候一次没除干净,比如说那些带n次方的,像8 = 2x2x2,需要除3次2,才可以完成。 
		} 
		x++;		//这个有关项,也就是最小质因数x已经从num中除掉,此时我们只要从下一个x进行计算即可。 执行完本句之后,此次while循环会结束,从而进入下一次的while循环 
		printf("new_x++ = %d\n",x); 
	} 
	printf("%d",ans);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

出其东门,有女如云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值