使用C程序查找数字的最大素数因子 [英] Finding the largest prime factor of a number using a C program

查看:107
本文介绍了使用C程序查找数字的最大素数因子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个代码,它以一个数字作为输入,并显示它的最大素数因子。该程序工作正常,直到9位数字。在9位数后,它表现出奇怪的负数。



 #include< stdio.h> 

int largestprimefactor(unsigned long a)
{
int i = 2,largeprimefactor = 2;

while(a!= 1)
{
if(a%i == 0)
{
while(a%i == 0 )
{
a = a / i;

printf(%d,i);

if(i> largeprimefactor)
{
largeprimefactor = i;
}
}
}

i ++;
}

返回largeprimefactor;
}

main()
{
unsigned long inputnumber;

printf(输入数字:);
scanf(%d,& inputnumber);

printf(\ n%d的最大素数因子是%d,inputnumber,maximumprimefactor(inputnumber));
}





我的尝试:



我认为它可能是一个数据类型问题,所以我尝试使用unsigned long long但它没有帮助。

解决方案

虽然inputnumber是一个你的scanf仍然只需要一个整数。你可以接受这样的无符号长:

 unsigned long inputnumber; 
scanf(%lu,& inputnumber);



或无符号长long:

 unsigned long long inputnumber; 
scanf(%llu,& inputnumber);



有关格式的参考,请参阅 scanf - C ++参考 [ ^ ]



显示结果时,应相应修改printf格式。


Quote:

使用C程序查找数字的最大素数因子



如果输入1 ,你的程序会说最大的素数因子是2.我怀疑是一个错误。

你还需要处理0和负数的结果。



您可以简化代码

 (a!=  1 
{
if (a%i == 0 // 您可以删除测试,因为
{
while (a%i == 0 // 条件相同
{
a = a / i;

printf( %d,i);

if (i> largeprimefactor)
{
largeprimefactor = i;
}
}
}

i ++;
}



[更新]

你甚至可以简化更多。

< pre lang =c ++> while (a!= 1
{
if (a%i == 0 // 您可以删除测试,因为
{
while (a%i == 0 // 条件相同
{
a = a / i;

printf( %d,i);

if (i> largeprimefactor) // 因为我永远不会低于largeprimefactor
{
largeprimefactor = i;
}
}
}

i ++;
}


I wrote a code to which takes a number as input and displays the largest prime factor of it. The program is working fine till 9 digit numbers. After 9 digit numbers it is behaving weirdly showing negative numbers.

#include<stdio.h>
 
int largestprimefactor(unsigned long a)
{
    int i =2 ,largeprimefactor = 2;
     
    while(a!=1)
    {
        if(a%i==0)
        {
            while(a%i==0)
            {
                a = a/i;
                 
                printf("%d ",i);
                 
                if(i>largeprimefactor)
                {
                    largeprimefactor = i;
                }
            }
        } 
         
        i++;
    }
     
    return largeprimefactor;
}
 
main()
{
    unsigned long inputnumber;
     
    printf("Enter a number : ");
    scanf("%d",&inputnumber);
     
    printf("\nThe largest prime factor of %d is %d",inputnumber,largestprimefactor(inputnumber));
}



What I have tried:

I thought it might be a data type problem so I tried using unsigned long long but it doesn't help.

解决方案

While inputnumber is a long, your scanf still only expects an integer. You can accept an unsigned long like so:

unsigned long inputnumber;
scanf("%lu",&inputnumber);


Or an unsigned long long:

unsigned long long inputnumber;
scanf("%llu",&inputnumber);


For reference of the formats, see scanf - C++ Reference[^]

When showing the result, you should modify the printf format accordingly.


Quote:

Finding the largest prime factor of a number using a C program


If you input 1, your program will say that the largest prime factor is 2. I suspect an error.
You also need to handle the result for 0 and negative numbers to be complete.

You can simplify your code

while(a!=1)
{
    if(a%i==0) // you can remove the test because
    {
        while(a%i==0) // the condition is the same
        {
            a = a/i;

            printf("%d ",i);

            if(i>largeprimefactor)
            {
                largeprimefactor = i;
            }
        }
    }

    i++;
}


[Update]
You can even simplify more.

while(a!=1)
{
    if(a%i==0) // you can remove the test because
    {
        while(a%i==0) // the condition is the same
        {
            a = a/i;

            printf("%d ",i);

            if(i>largeprimefactor)  // because i is never lower than largeprimefactor
            {
                largeprimefactor = i;
            }
        }
    }

    i++;
}


这篇关于使用C程序查找数字的最大素数因子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆