因子分解c语言编程,学习日记三:素因子分解,撸了一个上午

本文介绍了一个用于整数素数分解的C语言程序实现。通过递归搜索的方式找到所有素数因子及其对应的指数,并以数学表达式的形式输出。该程序首先定义了判断素数的函数IsPrimeNumber,然后通过search函数实现递归分解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include

#include

#define max 30

int a[max] ;

int b[max] ;

int expon ;

int IsPrimeNumber( int factor )

{

int k ;

int m;

(int)k=sqrt(factor); //判别i是否为素数,只需使2~根号i之间的每一个整数去除 for(m=2;m<=k;m++)

if(factor%m==0) break;

if(m>k)

return 1 ;

else return 0 ;

}

/*void search(int remainder,int factor)//需要将factor的值赋给i,否则当下一个因子无法从factor开时,

{

for( factor=0 ; factor<=remainder ; factor++,expon=0,nTerm++ )

{

if( IsPrimeNumber&& )

{

expon++ ;

a[nTerm] = factor ;

b[nTerm] = expon ;

}

}

}*/

void search(int remainder , int factor ,int nTerm )//剩余值,起始因子{

/*int expon;*/ //指数,第nTerm项 int i ;

int k ;

if(/*remainder==1||*/remainder==factor)

{

a[nTerm] = factor ;

b[nTerm] = expon+1 ;

printf( "%d^%d" , a[0],b[0] ) ;

for( k=1 ; k

printf( "*%d^%d",a[k],b[k] ) ;

//如果指数为1不打印 printf( "*%d^%d\n",a[k],b[k] ) ;

return ;

}

else

{

for( i=factor ; i<=remainder ; i++,expon=0 )//递归出口可否放在循环内部 {

//如果已经是素数只能分解为自身时应该输出 if( IsPrimeNumber(i) && remainder%i==0 ) //如果i是因子且剩余值remainder能整除这个因子,保存数据 {

if(a[nTerm]!=i/*i!=factor*/) //如果因子发生变化则项数加1,没变化项数不变 nTerm++ ;

expon++ ;

a[nTerm] = factor ;

b[nTerm] = expon ;

//判断remainder/i是否为0即判断remainder是否等于i

/*if(/*remainder==1||*/remainder==factor)

/*{

a[nTerm] = factor ;

b[nTerm] = expon+1 ;

printf( "%d^%d" , a[0],b[0] ) ;

for( k=1 ; k

printf( "*%d^%d",a[k],b[k] ) ;

//如果指数为1不打印

printf( "*%d^%d\n",a[k],b[k] ) ;

return ;

}*/

search( remainder/i , i , nTerm) ;

}

else if( !IsPrimeNumber(i) ||remainder%i!=0/*&& remainder%i!=0*/ ) //如果不是素数或者无法整除,进入下一个因子的判断 {

continue ;

}

}

/*else if(remainder==1) //如果起始因子从1开始那么当整数是1时数据无法保存,故整数N=1单独考虑

{

printf( "%d^%d" , a[0],b[0] ) ;

for( k=1 ; k

printf( "*%d^%d",a[k],b[k] ) ;

//如果指数为1不打印

printf( "%d^%d\n",a[k],b[k] ) ;

return ;

}*/

}

}

int main()

{

int N;

scanf( "%d" , &N ) ;

expon=0 ; //遗漏,并改为全局变量 printf("%d=",N);

search( N , 2 , 0) ;

//如果起始因子从1开始那么当整数是1时数据无法保存,故整数N=1单独考虑

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值