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

在C中打印复合数的最大素数因子,c,numbers,primes,composite,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

我正在解决一个难题,在这个难题中,我需要找到用户输入的复合数的最大素因子。 我想到了一些东西,并尝试了一下,但它没有成功地检测出复合数因子中最大的素因子

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

// 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除以它,得到最大的素数因子

诀窍是从2开始寻找最小的因子F,其中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函数在您的例子中使用起来有点混乱,因为它使用的是浮点数,而不是整数。

诀窍是,找到最小的素数因子,然后将复合数c除以它以获得最大的素数因子

诀窍是从2开始寻找最小的因子F,其中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函数有点混乱,因为它使用的是浮点数,而不是整数。

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


说到数字,我指的是一个介于2和sqrti之间的整数。当然,在你的内部循环中,如果确实存在一个不是I的因子的数字,你就要设置b=I。如果不存在系数为i的数字,则需要设置b=i


我所说的数字,是指一个介于2和sqrti之间的整数。当然,要找到素因子分解,通常会找到介于2和sqrtN之间的所有因子。你可以将合成除以其中的每一个,得到其余的因子。然后递归找到每一个的素因子


当你完成后,你会有一个所有主要因素的列表。获取列表中最大的项应该是相当简单的。

要找到素因子分解,通常可以找到2到sqrtN之间的所有因子。你可以将合成除以其中的每一个,得到其余的因子。然后递归找到每一个的素因子


当你完成后,你会有一个所有主要因素的列表。获取列表中最大的项应该是相当简单的。

因式分解是一个经典的数论问题。你可以在数论教科书中找到许多因式分解算法。其中一些可以在wiki上找到

因式分解是一个经典的数论问题。你可以在数论教科书中找到许多因式分解算法。其中一些可以在wiki上找到。嘿,谢谢你的朋友们,我做了一些事情,现在程序打印出了合成数的最大素因子,前提是合成数小于52,而对于大于52的范围,它不会打印正确的输出。 我正在添加代码,请你们帮我看看

#include<stdio.h>
真空总管 { int i,j,b=2,c; printf\n输入复合编号:; 扫描%d,&c; 印刷因子:

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

}

嘿,感谢朋友们的输入,我想出了一些办法,现在程序会打印出合成数的最大素数因子,前提是合成数小于52,而对于大于52的范围,它不会打印正确的输出。 我正在添加代码,请你们帮我看看

#include<stdio.h>
真空总管 { int i,j,b=2,c; printf\n输入复合编号:; 扫描%d,&c; 印刷因子:

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

}

在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

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

在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

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

这只是找到最大的因子,因为最小的因子总是素数。而不是j,这只是找到最大的因子,因为最小的因子总是素数。而不是j,然后递归找到每个因子的素数-听起来不对
我认为他的意思是递归地应用,以得到更小的数的更多因子。例如,如果输入值是52,可以取出一个2,而26仍然取出另一个2,作为52=4x13和4=2x2。@JB:是的,这就是我的想法。当我坐下来思考时,我不完全确定这是做事情的正确方法,但不管怎样,这是我的想法…然后递归找到每一个的基本因子-听起来不对,我想他是想递归地应用,从得到的较小数中找出更多的因子。例如,如果输入值是52,可以取出一个2,而26仍然取出另一个2,作为52=4x13和4=2x2。@JB:是的,这就是我的想法。当我坐下来思考时,我并不完全确定这是正确的做事方式,但这是我的想法……我不明白。做这样的谜题的目的是为了让你掌握用代码解决问题的技能。让别人做这件事是毫无意义的,我不明白。做这样的谜题的目的是为了让你掌握用代码解决问题的技能。让其他人做这件事是毫无意义的。正如我想象的那样,程序可以接受两种输入:1当复合数小于52时,我可以说现在的代码处理这种情况2当复合数大于52时,小于100本例未编码如果有人能说明第二部分的代码,那就太好了!正如我想象的那样,程序可以接受两种输入:1当复合数小于52时,我可以说现在的代码处理这种情况;2当复合数大于52时,小于100时,这种情况是不编码的。如果有人能说明第二部分的代码,那就太好了!