王尧 发表于 2019-5-2 22:29:15

请大神们帮忙看看这个程序一直不停运行并且不输出结果是哪里出了问题

#include <stdio.h>
int main()
{
    long long a = 600851475143,b,c,num = 0;
    for(b = 2;b < a/2;b++)
    {
      if(!(a%b))
      {
            for(c = 2;c <= b/2;c++)
            {
                if(!(b%c))
                {
                  break;
                }
                else if(c == b/2 && b > num)
                {
                  num = b;
                }
            }
      }
    }
    printf("600851475143的最大质数因子是:%lld\n",num);
    return 0;
}

ba21 发表于 2019-5-2 22:58:38

不可否认你的电脑是超级计算机。
搞个小点的数先试吧。要不然就想办法优化代码

王尧 发表于 2019-5-2 23:01:42

是因为数字太大了? 小一点的数完全没问题的

bin554385863 发表于 2019-5-2 23:33:57

{:5_104:}{:5_104:}
楼主的代码我的电脑最多只能算到10亿,再多一个零都不行{:5_104:}

wrpython 发表于 2019-5-3 05:26:41

不知道~坐等别人来解答~

Croper 发表于 2019-5-3 10:46:00

楼主的方法时间复杂度太高了,
试试这个吧,应该是秒算的#include <stdio.h>
#include <math.h>
#define MAX_PRIME_COUNT 100000

int prime(int);
int isprime(int);

int prime(int n){
        if (n>MAX_PRIME_COUNT) return -1;
        static int nums={2};
        static int size=1;
        while (n>=size){
                nums=nums;
                while (!isprime(++nums));
                ++size;
        }
        return nums;
}

int isprime(int num){
        int i;
        int s=sqrt(num);
        for (i=0;prime(i)<=s;++i){
                if (num % prime(i)==0) return 0;
        }
        return 1;
}

int maxprimefactor(long long a){
        int ret=1;
        int isprime=0;
        while (!isprime){
                int i;
                int s=sqrt(a);
                isprime=1;
                for (i=0;prime(i)<=s;++i){
                        if (a % prime(i)==0){
                                if (ret<prime(i)) ret=prime(i);
                                a/=prime(i);
                                isprime=0;
                                //printf("%d ",prime(i));
                                break;
                        }
                }
        }
        if (ret<a) ret=a;
        return ret;
}

int main(){
        long long a=600851475143;
        int b=maxprimefactor(a);
        printf("%lld的最大质因数是%d",a,b);
}

HUMMER军 发表于 2019-5-3 19:04:37

/*
你这个题目的原型是质因数分解
输入90,打印出90=2*3*3*5。
代码如下
*/
#include <stdio.h>
int main()
{
    int n,k;
    printf("请输入一个正整数:");
    scanf("%d",&n);
   
    printf("%d=",n);
   
    for(k=2;k<=n;k++)
    {
      while(n%k==0)
      {
            printf("%d",k);
            n=n/k;
            if(n!=1)
            {
                printf("*");
            }
      }
      
    }
    printf("\n");
    return 0;
}

/*
输出结果:
请输入一个正整数:90
90=2*3*3*5
*/


/*
对上面的程序加以改进,只输出最后一个质因数即可
*/

#include <stdio.h>
int main()
{
    long long int n,t,k;
    printf("请输入一个正整数:");
    scanf("%lld",&n);
    t=n;
   
    //printf("%d=",n);
   
    for(k=2;k<=n;k++)
    {
      while(n%k==0)
      {
            //printf("%d",k);
            n=n/k;
            if(n==1)
            {
                printf("%lld的最大质因数是%lld\n",t,k);
            }
      }
      
    }
    return 0;
}

/*
请输入一个正整数:90
90的最大质因数是5
*/

HUMMER军 发表于 2019-5-3 19:12:37

我提供的方法应该复杂度应该能接受吧!
每一次分解出来的质因数,都不会比前一个大!
比如输入90
第一次判断范围是在2-90之间,质因数是2
第二次判断范围在2-90/2(2-45)之间,质因数是3
第三次判断范围在2-45/3(2-15)之间,质因数是3
第四次判断范围在2-15/3(2-5)之间,质因数是5

王尧 发表于 2019-5-3 22:25:11

Croper 发表于 2019-5-3 10:46
楼主的方法时间复杂度太高了,
试试这个吧,应该是秒算的

这个程序能计算出结果,但是代码有点看不懂。。。。。。这是第一段考核的题目。
页: [1]
查看完整版本: 请大神们帮忙看看这个程序一直不停运行并且不输出结果是哪里出了问题