用C打印复合数的最大素数因子

时间:2010-08-12 16:30:12

标签: c numbers primes composite

我正在解决一个难题,我需要找到用户输入的复合数字的最大素数因子。 我想到了一些东西,并尝试过,但它无法检测到复合数字因素中最大的素因子。

我正在下面添加我的代码,如果有人能帮我在这里找到最大的素数,我将不胜感激。在这些因素中打印出来。

// 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);
}

6 个答案:

答案 0 :(得分:3)

诀窍是,找到最小素数因子,并将复合数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>函数在您的情况下有点麻烦,因为它适用于浮点数,而不是整数。

答案 1 :(得分:1)

在内部循环中,如果 存在不是因子b = i的数字,则设置为i。您需要设置b = i,如果不存在,则 的因素为i

(“数字”,我的意思是“2sqrt(i)之间的整数”当然)

答案 2 :(得分:1)

要查找素数因子分解,您通常会找到2和sqrt(N)之间的所有因子。您可以按每个因素划分复合,以获得其余因子。然后递归以找出每个因素的主要因素。

完成后,您将获得所有主要因素的列表。获取列表中最大的项目应该是相当简单的。

答案 3 :(得分:0)

因子分解是一个典型的数论问题。您可以在数论教科书中找到许多分解算法。其中一些可在维基http://en.wikipedia.org/wiki/Integer_factorization

上找到

答案 4 :(得分:0)

嘿感谢输入的朋友,我找到了一些东西,现在程序打印出复合数字的最大素数因子,前提是复合数小于52,而对于高于此范围的更高范围,它不打印正确的输出。 我正在附加代码,请看看你们是否可以帮助我

#include<stdio.h>

void main() {     int i,j,b = 2,c;     printf(“\ n输入复合数:”);     scanf(“%d”,&amp; c);     printf(“因素:”);

for(i=1; i<=c/2; i++)
{
    if(c%i==0)
    {
        printf("%d ", i);
        for(j=1; j<=i; j++) //since a numbr cand be divisible by a number greated than its half
        {               if(i%j > 0)
                b = i; //b stores the largest prime factor
            if(b%3==0)
                b = 3;
                else if(b%2==0)
                b=2;
              else if(b%5==0)
                b=5;
                }
    }
}


printf("%d\nLargest prime factor: %d\n", c, b);

}

答案 5 :(得分:0)

在Python中,像这样的东西会:

import math
import itertools

# largest prime factor of a composite number
def primality(num):
    for i in range(2,int(math.sqrt(num))+1):
        if num%i ==0:
             return 0
    return 1

if __name__ == '__main__':
    number = 600851475143
    for i in itertools.count(2,1):
            if number%i == 0:
                if number%10 in [7,9,1,3] and primality(number/i):
                    print number/i
                    break

我所做的检查素性是整齐的平方根技术。