输出一个整数的全部素数因子。要求判断是否为素数,素数的判断用函数prime()函数。

编写程序,输出一个整数的全部素数因子。要求判断是否为素数,素数的判断用函数prime()函数。如整数120的素数因子为2 2 2 3 5。

这个你用bing一搜不全都是嘛。下面是个普通写法,要追求效率在改写


#include <stdio.h>

int prime(int n)
{
    if (n < 2)
        return 0;
    for (int i = 2; i < n; i++)
    {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

void factor(int n)
{
    for (int i = 2; n > 1; i++)
    {
        if (n % i == 0 && prime(i))
        {
            printf("%d ", i);
            n /= i;
            i--;
        }
    }
}

int main()
{
    int n;
    printf("整数是多少: ");
    scanf("%d", &n);
    factor(n);
    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7601756
  • 这篇博客也不错, 你可以看下输入一个大于3的整数,判断它是否为素数(prime,又称质数)
  • 除此之外, 这篇博客: C语言例题第五章中的 【例5-4】求100以内的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。要求定义和调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    /* 使用函数求100以内的全部素数 */
    #include <stdio.h>
    #include <math.h>					/* 调用求平方根函数,需要包含数学库 */
    int main(void)
    {
        int count, m;   
    	int prime(int m);				/* 函数声明 */
    
        count = 0;						/* count记录素数的个数,用于控制输出格式 */
        for(m = 2; m <= 100; m++){
            if(prime(m)!=0){		      	/* 调用prime(m)判断m是否为素数 */
                 printf("%6d", m);     	/* 输出m */
                 count++;            	/* 累加已经输出的素数个数 */
                 if (count %10 == 0)  printf("\n");   /* 如果count是10的倍数,换行 */
            }
        }
        printf("\n");
    }
    /* 定义判断素数的函数,如果m是素数则返回1("真");否则返回0("假")*/
    int prime(int m)
    {
        int i, n;
    
        if(m == 1) return 0;   	    /* 1不是素数,返回0 */
        n = sqrt(m);
        for( i = 2; i <= n; i++)     
           if (m % i == 0){   		/* 如果m不是素数 */
               return 0;			/* 返回0 */
           }
    
        return 1;					/* m是素数,返回1 */
    }
    
  • 以下回答来自chatgpt:

    我可以解决该问题。

    解决方案如下:

    首先需要定义一个判断素数(质数)的函数,参考段落1中的prime()函数。

    接下来输入需要分解质因数的整数n,按照素数因子从小到大依次进行除法运算,如果结果为整数,则输出该素数因子,并把n重新赋值为运算后的结果,重复以上操作直到无法继续除尽为止。具体实现参考以下代码:

    include

    include

    int prime(int m) {//判断素数的函数,参考段落1 int i, n; if(m == 1) return 0;
    n = sqrt(m); for( i = 2; i <= n; i++)
    if (m % i == 0){
    return 0;
    } return 1;
    }

    int main() { int n,i; printf("please input the integer n:");//输入需要分解质因数的整数n scanf("%d",&n); for(i=2;i<=n;i++){//从2开始枚举素数 if(prime(i)){//如果i是素数 while(n%i==0){//不断进行除以i的运算,直到无法再整除 printf("%d ",i); n=n/i;//更新n的值 } } } return 0; }

    以上代码使用了循环结构进行素数枚举和连续的除法运算,同时利用了prime()函数判断素数。具体实现可以根据输入的整数n和需要分解的素数不同而得到不同结果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^