最大质因数

omg第一次尝试写博客,小白一枚,希望大家多多指教!

13195的所有质因数为5、7、13和29。600851475143最大的质因数是多少?

质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。

最大质因数又是什么意思呢? 每个合数都可以写成几个质数(也可称为素数)相乘的形式,这几个质数就就叫做这个合数的质因数。找出这几个质因数中最大的质数即为原数的最大质因数。若刚开始这个数字就是质数那么它的做大质因数即为本身。

我们可以首先想想第一种 暴力解法 给出一个数我们开始遍历(由于求最大的质因数则从后开始遍历)(由于存在自身就是质数的数字所以如果判断出原数就是质数则直接输出)
代码如下:

public static int  Prime (long m)//判断数字是否为质数
	{
		for(int i=2;i*i<=m;i++)
		{
			if(m%i==0)
				return 0;//不是质数返回0
		}
		return 1;//是质数返回1
	}
	public static long  Maxprime(long x)//查找最大质因数
	{
		if(Prime(x)==1)
		{
			return x;
		}
		else 
		{
			for(long i=x/2+1;i>=2;i--)
			{
				if((x%i==0)&&(Prime(i)==1))
				{
					return i;//是原数x的因数且是质数则为要求值
				}
				
			}
			return 0;		
		}
		
	}

第二种方法我们把数字进行划分,划分成多个质数判断出最大即为最大质因数。这里相当于我们来用多个质数划分一个数。
计比如数24:
划分24
可知最大质因数为3
这就是最大质因数求法的手工过程。

代码如下:

public static long GetMax(long a)
	{
		if(a==1)
			return 1;
		else
		{
			for(int i=2;i*i<=a;i++)
			{
				if(a%i==0)
				{
					return GetMax(a/i)>GetMax(i)?GetMax(a/i):GetMax(i);//判断质数大小
					
				}
			}
			return a;//若a为质数则直接跳转至此!
		}
	}

debug下的数据变化详情(便于理解此递归过程)这里a以40为例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

emmmmm以上是我的个人拙见,第一次写,很粗糙。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值