毛发怪 发表于 2023-8-16 10:39:44

为什么第二个函数中的变量j不用判断是不是素数?

#include <stdio.h>
int sushu(int a)
{
        for(int i=2;i<a/2;i++)
        {
                if(a%i==0)
                {
                        return 1;
                }
        }
        return 0;
}
void fun(int a)
{
        printf("%d=",a);
        int j=2,m;
        m=a;
        while(j<a/2)
        {
                //sushu(j);
                if(m%j==0)
                {
                        printf("%d",j);
                        if(m/j>2)
                        {
                                printf("x");
                        }
                       m/=j;
                }
                else
                {
                        j++;
                }
        }
}
int main(void)
{
        int a;
        int c;
        scanf("%d",&a);
        c=sushu(a);
        if(c)
        {
                fun(a);
       }
        else
        {
                printf("%d=%d",a,a);
        }
        return 0;
}

isdkz 发表于 2023-8-16 10:39:58

第二个函数中的变量j不需要判断是否为素数,因为它的作用是用来寻找a的因子。在while循环中,变量j从2开始递增,每次判断m是否能被j整除。如果能整除,说明j是a的一个因子,我们打印出来,并且更新m的值为m/j。然后继续循环,直到j大于等于a的一半时结束。

在这个过程中,我们并不需要判断j是否为素数。因为如果j不是素数,那么它一定有一个小于j的因子k,那么m能被k整除,而不会被j整除。所以我们只需要判断m能否被j整除,就可以确定j是否是a的因子。而不需要判断j是否为素数。
页: [1]
查看完整版本: 为什么第二个函数中的变量j不用判断是不是素数?