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:
可知最大质因数为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以上是我的个人拙见,第一次写,很粗糙。