实验项目2-7:素因子分解
2016-07-22 15:50
253 查看
给定某个正整数N,求其素因子分解结果,即给出其因式分解表达式 N = p1^k1 * p2^k2 *…*pm ^km。
输入格式说明:
输入long int范围内的正整数N。
输出格式说明:
按给定格式输出N的素因式分解表达式,即 N = p1^k1 * p2^k2 *…*pm ^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki==1即因子pi只有一个时不输出ki。
序号 输入 输出
1
1024
1024=2^10
2
1323
1323=3^3*7^2
3
97532468
97532468=2^2*11*17*101*1291
4
1
1=1
5
3
3=3
输入格式说明:
输入long int范围内的正整数N。
输出格式说明:
按给定格式输出N的素因式分解表达式,即 N = p1^k1 * p2^k2 *…*pm ^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki==1即因子pi只有一个时不输出ki。
序号 输入 输出
1
1024
1024=2^10
2
1323
1323=3^3*7^2
3
97532468
97532468=2^2*11*17*101*1291
4
1
1=1
5
3
3=3
第一种方法:非递归程序。 #include<stdio.h> int Isprime(int N) { int i; if(N==1||N==2) return 1; for(i=2;i*i<=N;i++) { if(N%i==0) return 0; } return 1; } int main() { int N,i,count,flag,temp; scanf("%d",&N); if(Isprime(N))//1和本身就是素数的直接输出 printf("%d=%d\n",N,N); else { temp=N; count=0;//输出素因子的指数 flag=0;//第一个素因子标志 printf("%d=",N); while(temp%2==0) { temp=temp/2; count++; flag=1; } if(1==count) printf("2"); else if(count>1) printf("2^%d",count); for(i=3;i*i<=N;i=i+2) { count=0; while(temp%i==0) { temp=temp/i; count++; } if(1==count) { if(0==flag) flag=1; else printf("*"); printf("%d",i); } else if(count>1) { if(0==flag) flag=1; else printf("*"); printf("%d^%d",i,count); } } printf("\n"); } } 第二种方法:递归算法 //感觉递归写的有点复杂,还不如非递归 #include<stdio.h> int count;//输出素因子的项目数 int Isprime(int N) { int i; if(2==N) return 1; for(i=2;i*i<=N;i++) { if(N%i==0) return 0; } return 1; } void fenjie(int remain,int start,int num) { int i=start; if(remain==1) return; else if(Isprime(remain)) { count++; printf("*%d",remain); return; } else if(i*i<=remain) { if(Isprime(i)) { while(remain%i==0) { num++; remain=remain/i; } if(num==1) { count++; if(count>1) printf("*%d",i); else printf("%d",i); } else if(num>1) { count++; if(count>1) printf("*%d^%d",i,num); else printf("%d^%d",i,num); } } fenjie(remain,i+1,0); } } int main() { int N; scanf("%d",&N); count=0; if(1==N||Isprime(N)) printf("%d=%d\n",N,N); else { printf("%d=",N); fenjie(N,2,0); printf("\n"); } return 0; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- C#递归算法之分而治之策略
- Lua和C语言的交互详解
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#递归方法实现无限级分类显示效果实例
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#递归算法之打靶算法分析
- C#中的尾递归与Continuation详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码