本文主要是介绍南阳理工OJ_阶乘因式分解(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最初版:
/*
* 程序的版权和版本声明部分:
* Copyright (c) 2013,郑州大学SIAS国际学院
* 作 者: 王 杰
* 完成日期:2013 年 11 月 19 日
*
* 对任务及求解方法的描述部分:
* 输入描述: 略或见注释、总结
* 问题描述: 略或见注释、总结
* 程序输出: 略或见注释、总结
* 问题分析: 略或见注释、总结
* 算法设计: 略或见注释、总结
*/#include<stdio.h>int prime(int n)
{int i; if(n<2) return 0; //包括n=1for(i=2;i*i<=n;i++)if(n%i==0) return 0;return 1;
}int main()
{int s;int m,n;int p;int j;int k;int h;scanf("%d",&s);while(s--){k=2;p=0;scanf("%d%d",&n,&m);for(int i=2;i<=n;i++){if(prime(i)){if(i==m)p++;}else{j=i;h=1;while(h){while(j>1){ if(j%k!=0)k++;else{j=j/k;if(k==m)p++;}}k=2;h=0;}}}printf("%d\n",p);}return 0;
}
改进版:
/*
* 程序的版权和版本声明部分:
* Copyright (c) 2013,郑州大学SIAS国际学院
* 作 者: 王 杰
* 完成日期:2013 年 11 月 19 日
*
* 对任务及求解方法的描述部分:
* 输入描述: 略或见注释、总结
* 问题描述: 略或见注释、总结
* 程序输出: 略或见注释、总结
* 问题分析: 略或见注释、总结
* 算法设计: 略或见注释、总结
*/
#include<stdio.h>int prime(int n)
{int i; if(n<2) return 0; //包括n=1for(i=2;i*i<=n;i++)if(n%i==0) return 0;return 1;
}int main()
{int s;int m,n;int p;int j;scanf("%d",&s);while(s--){p=0;scanf("%d%d",&n,&m);for(int i=2;i<=n;i++){if(prime(i)){if(i==m)p++;}else{j=i;while(j%m==0){j=j/m;p++;} }}printf("%d\n",p);}return 0;
}
再改进版:
/*
* 程序的版权和版本声明部分:
* Copyright (c) 2013,郑州大学SIAS国际学院
* 作 者: 王 杰
* 完成日期:2013 年 11 月 19 日
*
* 对任务及求解方法的描述部分:
* 输入描述: 略或见注释、总结
* 问题描述: 略或见注释、总结
* 程序输出: 略或见注释、总结
* 问题分析: 略或见注释、总结
* 算法设计: 略或见注释、总结
*/
#include<stdio.h>
int main()
{int s;int m,n;int p;int j;scanf("%d",&s);while(s--){p=0;scanf("%d%d",&n,&m);for(int i=2;i<=n;i++){j=i;while(j%m==0){j=j/m;p++;}}printf("%d\n",p);}return 0;
}
运行结果:
总结:第一点:做这道题的时候,根本原因是不会分解质因数,并且考虑的有点多余(其实只要能达到目的就行了,没有必要一步一步的去做)所以开始的时候写的算法太过于复杂,后来就改进了一下算法,问题就清晰地多了。第二点:是一个细节上的问题,就是if的缩进问题,有时候if后有一个语句可以不用缩进,但是如果后面带有else的话,就要考虑清楚,因为else要和上面的最近的if配对,所以要考虑if与else的配对问题。
这篇关于南阳理工OJ_阶乘因式分解(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!