1

N! で表される負でない整数 N の階乗は、N 以下のすべての正の整数の積です。任意の数の階乗は、その素因数の最も単純な形式で表すことができます。例: 4!=4*3*2*1= (2^3)*(3^1) 階乗は、各素因数が含まれる回数で指定することもできます。したがって、24 は (3 1) のように指定できます。 3 2、1 3 を意味します。私が書いたコードは小さな数字に対して答えを出しますが、数字が大きくなるとプログラムは答えを返しません

#include<stdio.h>

long fact(long n)
{
    if(n==0)
        return 1;
    else
        return(n*fact(n-1));
}

int main()
{
    long a[10]={0};
    long n,l=0,count=0,i,j,flag;
    if(!scanf("%ld",&n))
    {
        printf("Invalid input");
        goto l1;
    }

    if(n<0)
    {
        printf("Invalid input");
        goto l1;
    }

    n=fact(n);

    while(n%2==0)
    {
        count++;
        n=n/2;
    }

    a[l]=count;
    l++;

    for(i=2;i<=n;i++)
    {
        count=0;
        j=2;
        flag=0;
        while(j<i)
        {
            if(i%j==0)
            {
                flag=0;
                break;
            }
            else
                flag=1;
            j++;

        }

        if(flag==1)
        {
            count=0;
            while(n%i==0)
            {
                count++;
                n=n/i;
            }
            a[l]=count;
            l++;
        }
    }

    for(i=0;i<l;i++)
        printf("%ld ",a[i]);

l1:return 0;

}
4

4 に答える 4

0

大きな数を因数分解するための効果的なアルゴリズムはありません。おそらく期待した答えではないかもしれませんが、ウィキペディアをご覧ください: http://en.wikipedia.org/wiki/Integer_factorization

于 2013-08-20T15:07:41.173 に答える