大体描述:

给出一个除法表达式:X1/X2/X3/…/Xk,其中Xi为正整数。除法表达式应当按照从左到右的顺序求和,例如,表达式1/2/1/2的值为1/4。但是可以在表达式中嵌入括号改变计算顺序,例如,表达式(1/2)/(1/2)的值为1.

输入X1,X2…,Xk,判断是否可以通过添加括号,使表达式的值为整数。K<=10000,Xi<=10^9;

可以分析出来我们只需要判断X1*X3…Xk/X2是否为整数即可。

一:高精度运算,

由题目所给的范围可以知道,必须利用高精度才能存储X1…Xk的乘积,所以只需要用高精度运算进行K-2次乘法和1次除法即可。

此方法有点麻烦,只做分析

二:唯一分解定理

分析:由唯一分解定理,X2=P1^A1*P2^A2…P2*An,(其中Pi为质数)

所以利用唯一分解定理,我们就只需要依次判断Pi的指数Ai是否不大于X1*X3…Xk里面Pi的指数ai即可。

给出AC代码如下:


#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
int item[10005];
int nums[100][2];//long long 类型的数据分解为质数相乘不超过16位
int ptot[100];void solve(int num1)
{memset(ptot,0,sizeof(ptot));int num2=nums[0][0];int i,j;for(i=1;i<=num2;i++){int p=nums[i][0];for(j=1;j<=num1;j++){int q=item[j];if(j==2) continue;while(q%p==0){q/=p;ptot[i]++;}}if(ptot[i]<nums[i][1]){cout<<"NO"<<endl; return;}}cout<<"YES"<<endl;}
void depart(int m)//分解m{int&num = nums[0][0]=0;//nums[0][0]是表头,存放总的个数,用引用比较方便num = 0;for (int i = 2; i*i <= m;i++)if (m%i == 0){nums[++num][0] = i;nums[num][1] = 0;do{nums[num][1]++;m /= i;} while (m%i == 0);//将i除干净}if (m > 1)//如果分解到最后m仍然大于1,说明它是一个素数。注意:如果只是判断素因子有哪些,可以没有此处判断,否则必须有此步{nums[++num][0] = m;nums[num][1] = 1;}}
int main()
{int n;cin>>n;while(n--){char c;int i;for(i=1;;i++)//输入除法表达式{scanf("%d",&item[i]);c=getchar();if(c=='\n') break;}if(i==1) cout<<"YES"<<endl;else{depart(item[2]);solve(i);}}return 0;
}        

三:欧几里得算法

分析:我们可以直接约分,依次将X1,X3,…Xk与X2约去它们的最大公约数,如果最后X2为1,则说明可以,反之不行

给出AC代码:


#include <iostream>
#include <stdio.h>
using namespace std;
const int K=10005;
int num[K];int gcd(int a, int b){return b==0?a:gcd(b,a%b);
}
bool solve(int s)
{num[2]/=gcd(num[1],num[2]);if(num[2]==1) return true;for(int i=3;i<=s;i++){num[2]/=gcd(num[2],num[i]);if(num[2]==1) return true;}return false;
}int main()
{int n;cin>>n;while(n--){char c;int i;for(i=1;;i++)//除法表达式的输入{scanf("%d",&num[i]);c=getchar();if(c=='\n') break;}if(i==1) cout<<"YES"<<endl;else {if(solve(i)) cout<<"YES"<<endl;else cout<<"NO"<<endl;}}return 0;
}

注:以上方法参考刘汝佳老师的《算法竞赛入门经典》,

NYOJ_1013除法表达式相关推荐

  1. 欧几里得算法(除法表达式)

    题意: 给出一个这样的除法表达式:X1/X2/X3/···/Xk,其中Xi是正整数.除法表达式应当按照从左到右的顺序求和,例如表达式1/2/1/2的值为1/4.但是可以在表达式中嵌入括号以改变计算顺序 ...

  2. C#系列四《C#运算符与表达式》

    了解完C#数据类型与变量之后,我们还会遇到变量之间的运算,如计算两个数的和等等运算.那么C#中都有那些常用的运算符呢(本篇只介绍基本常用运算符,其他运算符在后续知识点中用到时会介绍)?那么...往下看 ...

  3. C语言——运算符与表达式

    知识点一:表达式 1)什么是表达式:在C语言中,一个或多个运算对象与零个或多个运算符组成表达式; 例: 100 5 + 10 a / b a * 10 / b + c 2)表达式的结果: printf ...

  4. 一元操作符、强制类型转换表达式、乘除操作符、加法操作符、移位操作符、关系操作符、判等操作符、位操作符与逻辑操作符、条件与操作符、条件或操作符--运算机制与返回值

    操作符处理及返回值 先遣提示 一元操作符 前缀递增操作符 ++ 前缀递增操作符 - - 一元加号操作符 + 关于一元数值提升或二元数值提升 可以看这篇博客 一元减号操作符 - 这里涉及了 原码,反码, ...

  5. 操作符优先级(详细说明+表格+问题表达式)

    目录 前言 优先级 结合性 是否控制求值顺序 问题表达式 一. 二. 三. 前言 复杂表达式的求值有三个影响的因素. 操作符的优先级 操作符的结合性 是否控制求值顺序 两个相邻的操作符先执行哪个?取决 ...

  6. C#中的Infinity有个小坑

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...

  7. 编写高效的C程序与C代码优化

    说明: 本篇文章翻译自:http://www.codeproject.com/Articles/6154/Writing-Efficient-C-and-C-Code-Optimization 其中参 ...

  8. C语言博客作业05--指针

    1.本章学习总结(2分) 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 这几周初步学习了几种数组:一维数组.二维数组和字符数组. 指针可以存储变量地址,可以对复杂数据进 ...

  9. 使用C++对TINY+语言进行词法分析、语法分析、语义分析和中间代码生成

    实验报告 实验环境 操作系统:Win 10 编译器:g++ 项目地址 项目地址 实验目的 构造TINY+的语义分析程序并生成中间代码 实验内容 构造符号表,构造TINY+的语义分析器,构造TINY+的 ...

最新文章

  1. C语言中的CONST使用
  2. 实验一:SQL server 2005高可用性之----日志传送
  3. 虚拟主机域名访问yum服务器,虚拟主机域名访问yum服务器
  4. 总结:JDK1.5-JDK1.8各个新特性
  5. Spring5参考指南:容器扩展
  6. 西南交大计算机组成原理考试大纲,西南交大计算机组成原理实验二七段LED数码管显示译码器的设计.docx...
  7. Eclipse集成Maven插件tomcat部署 Debug jar包的源码联结
  8. eclipse 快捷键组合
  9. 评价微型计算机总线的性能指标,计算机组成原理学习笔记(3):总线
  10. php青茶什么时候拆,茶叶保质期多长时间 黑绿红白黄青茶的保质期为多久
  11. Educational Codeforces Round 10 B. z-sort
  12. 数据结构笔记(三十四)二叉排序树的删除
  13. linux下blast设计引物,Primer-BLAST:NCBI的引物设计和特异性检验工具
  14. 泛微服务器运维监控,泛微协同平台E-cology8后台维护手册-流程引擎(261页)-原创力文档...
  15. 11种方法检测软件可靠性
  16. 计算机怎么保存窗口画面,电脑视频怎么旋转保存 怎样将视频画面进行旋转并保存|视频画面旋转工具...
  17. html下拉选择图片,图片+JavaScript+CSS打造漂亮的select下拉选择框
  18. 网站流量统计(免费的)
  19. coward的个人简介
  20. Word2007 无法复制粘贴的原因以及正确加载mathtype

热门文章

  1. 【MM配置】Inventory Management 库存管理
  2. [SAP-SD]Sales Order 中的User Exit开发
  3. 前驱、后驱和四驱,究竟哪个好?
  4. 公司间采购的后台配置备忘录
  5. jquery找祖先包含_Jquery的parent和parents(找到某一特定的祖先元素)
  6. java swing最小化_Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果)...
  7. 动态代理的两种方式_动态代理是基于什么原理?
  8. zigbee看门狗综合实验_2.5KW风光互补发电教学实验系统,风能太阳能发电实训装置_搜狐汽车...
  9. phpstudy如何升级php,phpstudy如何升级phpmyadmin?
  10. qt mysql怎么选表_Qt的Mysql数据库表操作(1)