我正在解决一个难题,我需要找到用户输入的合数的最大质因数。我想到了一些东西并尝试了一下,但它无法检测出合数因子中最大的素因子。
我在下面附加了我的代码,如果有人能帮我在这里检测最大的素数,我将不胜感激。在这些因素中并打印出来。
// 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);
}
诀窍是,找到
最小 质因数,然后除以合数
c
求最大质因数。
诀窍是找到最小因子 F(从 2 开始),其中 C/F 是质数。那么,C/F就是C的最大质因数。
编辑:您似乎还想列出所有因素。问题是,在测试素数的内部循环中,您将最大素数设置为 i
对于可以被任何东西整除的数字。换句话说,尝试这样的事情:
is_prime = true;
for (j = 2; j <= x / 2; j++) {
if (i % j == 0)
is_prime = false;
}
if (is_prime)
largest_prime = x;
请注意,您实际上可以在 x 除以 2 之前停止。您可以在 x 的平方根处停止。然而,sqrt()
在 <math.h>
中发挥作用在你的情况下使用起来有点麻烦,因为它使用 float ,而不是整数。
我是一名优秀的程序员,十分优秀!