我正在解决一个难题,其中我需要找到用户输入的合成数的最大素数因子。我想到了一些东西,并进行了尝试,但它无法检测到合成数的因子中最大的素因数。
我附上了下面的代码,如果有人能帮我找出最大的素数no,我将不胜感激。并将其打印出来。
// Accept a composite number from user and print its largest prime factor.
#include<stdio.h>
void main()
{
int i,j,b=2,c;
printf("\nEnter a composite number: ");
scanf("%d", &c);
printf("Factors: ");
for(i=1; i<=c/2; i++)
{
if(c%i==0)
{
printf("%d ", i);
for(j=2; j<=i/2; j++) //since a numbr cand be divisible by a number greated than its half
{ if(i%j > 0)
b = i;
else if(i==3)
b = 3;
}
}
}
printf("%d\nLargest prime factor: %d\n", c, b);
}发布于 2010-08-13 00:39:50
在内部循环中,如果确实存在一个不是i因子的数字,则设置为b = i。如果不存在作为i因子的数字,则需要设置b = i。
(我所说的“数字”,当然是指“2和sqrt(i)之间的整数”)
发布于 2010-08-13 00:45:16
要找到素因式分解,通常会找到2和sqrt(N)之间的所有因子。您可以将组合除以其中的每一个,以获得其余的因子。然后递归找出每一个的质因数。
完成后,您将拥有一个包含所有主要因素的列表。获取列表中最大的项应该是相当简单的。
发布于 2010-08-13 01:18:43
因式分解是一个经典的数论问题。你可以在数论教科书中找到许多因式分解算法。其中一些可以在维基http://en.wikipedia.org/wiki/Integer_factorization上找到
https://stackoverflow.com/questions/3469882
复制相似问题