南阳理工OJ_阶乘因式分解(一)

2023-12-14 08:58

本文主要是介绍南阳理工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_阶乘因式分解(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491906

相关文章

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

c++习题30-求10000以内N的阶乘

目录 一,题目  二,思路 三,代码    一,题目  描述 求10000以内n的阶乘。 输入描述 只有一行输入,整数n(0≤n≤10000)。 输出描述 一行,即n!的值。 用例输入 1  4 用例输出 1  24   二,思路 n    n!           0    1 1    1*1=1 2    1*2=2 3    2*3=6 4

高精度加法,乘法,阶乘

#include <iostream>#include <map>#include <string>#include <algorithm>using namespace std;const int Max = 50000;string str1,str2;/***********乘法***********/void chenfa(){cin >> str1>>str2;int a

哈理工新生赛热身赛解题报告

本次热身赛6道题目,由于没有官方解题报告,自己写了一个山寨版的解题报告,希望对学弟学妹有所帮助 期中两到签到题该校OJ上没有挂出,我在田大神的帮助下a掉了其它四题,解题报告如下所示 线段 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 10(6 users)Total Accepted: 7(6 users)Rating: S

哈理工OJ 2179(深搜)

组合 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 7(5 users)Total Accepted: 6(5 users)Rating: Special Judge: No Description 给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出。 Input 第一行是一个整

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

【LeetCode】:面试题 16.05. 阶乘尾数

🎁个人主页:我们的五年 🔍系列专栏:C++课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章   好久没有写文章了,今天碰见了一道有趣的题目,写下来分享一下。 🏆1.问题描述:  🏆2.问题分析: 🎲优化一: 首先看到这道题的时候,暴力肯定是不行的,n的阶乘可能会是一个很大的数,肯定是会超过int,long long的范围的。 然后再去想其他的方法优

C/C++的阶乘求和以及变量存储数据大小

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 2.2.3 测试结果 3. 备注 1. 前言 其实刚学C语言的时候,打击都会先认识,类型,像int,double之类的存储类型。在这篇文章中,就需要大家对这个大小有了解。 2. 正文 2.1 问题 题目描述: 一个正整数如果等于组成它的各位数字的阶乘之和,该整数

OJ-0905

题目 示例1: 输入:10 10 56 34 99 1 87 8 99 3 255 6 99 5 255 4 99 7 255 2 99 9 255 213 4输出:99 示例2: 输入:10 10 255 34 0 1 255 8 0 3 255 6 0 5 255 4 0 7 255 2 0 9 255 213 5输出:255 import java.util.

每日OJ_牛客_Emacs计算器(逆波兰表达式)

目录 牛客_Emacs计算器(逆波兰表达式) 解析代码 牛客_Emacs计算器(逆波兰表达式) Emacs计算器__牛客网 解析代码 逆波兰表达式(后缀表达式)求值,需要借助栈,思路: 循环输入,获取逆波兰表达式,然后进行以下补助,直到测试完所有的测试用例: 遇到数字字符串,将该数字字符串转化为数字然后入栈。遇到操作符时,从栈顶取两个数字,然后进行该运算符所对应运算