【23CSPJ普及组】一元二次方程(uqe)

时间限制: 1000 ms         内存限制: 524288 KB

【题目描述】

众所周知,对一元二次方程 𝑎x^{^{2}}+𝑏𝑥+𝑐=0,(𝑎≠0),可以用以下方式求实数解:

∙∙ 计算 Δ=b^{2}−4ac,则:

1. 若 Δ<0,则该一元二次方程无实数解。

2. 否则 Δ≥0,此时该一元二次方程有两个实数解 x1,2=\frac{-b\pm\sqrt{ \Delta}}{2a}

例如:

x^{^{2}}+x+1=0 无实数解,因为 Δ=12−4×1×1=−3<0。

x^{^{2}}−2x+1=0 有两相等实数解 x1,2=1。

x^{^{2}}−3x+2=0 有两互异实数解 x1=1,x2=2。

在题面描述中 𝑎 和 𝑏 的最大公因数使用 gcd(𝑎,𝑏) 表示。例如 12 和 18 的最大公因数是 6,即 gcd(12,18)=6。

现在给定一个一元二次方程的系数 𝑎,𝑏,𝑐,其中 𝑎,𝑏,𝑐 均为整数且 𝑎≠0。你需要判断一元二次方程  𝑎x^{^{2}}+𝑏𝑥+𝑐=0 是否有实数解,并按要求的格式输出。

在本题中输出有理数 𝑣 时须遵循以下规则:

∙∙ 由有理数的定义,存在唯一的两个整数 𝑝 和 𝑞,满足 𝑞>0,gcd(𝑝,𝑞)=1 且 𝑣=𝑝𝑞。

∙∙ 若 𝑞=1,则输出 {p},否则输出 {p}/{q},其中 {n} 代表整数 𝑛 的值;

∙∙ 例如:

∙∙ 当 𝑣=−0.5 时,𝑝 和 𝑞 的值分别为 −1 和 2,则应输出 -1/2;

∙∙ 当 𝑣=0 时,𝑝 和 𝑞 的值分别为 0 和 1,则应输出 0。

对于方程的求解,分两种情况讨论:

1. 若 Δ=b^{2}−4𝑎𝑐<0,则表明方程无实数解,此时你应当输出 NO;

2. 否则 Δ≥0,此时方程有两解(可能相等),记其中较大者为 𝑥,则:

(1). 若 𝑥 为有理数,则按有理数的格式输出 𝑥。

(2). 否则根据上文公式,𝑥 可以被唯一表示为 𝑥=q1+q2\sqrt{r} 的形式,其中:

     ∙𝑞1,𝑞2 为有理数,且 𝑞2>0;

     ∙∙𝑟 为正整数且 𝑟>1,且不存在正整数 𝑑>1 使 d^{2}∣𝑟(即 𝑟 不应是 d^{2} 的倍数);

  此时:

  1. 若 𝑞1≠0,则按有理数的格式输出 𝑞1,并再输出一个加号 +;

  2. 否则跳过这一步输出;

  随后:

  1. 若 𝑞2=1,则输出 sqrt({r});

  2. 否则若 𝑞2 为整数,则输出 {q2}*sqrt({r});

  3. 否则若 𝑞3=1𝑞2 为整数,则输出 sqrt({r})/{q3};

  4. 否则可以证明存在唯一整数 𝑐,𝑑 满足 𝑐,𝑑>1,gcd(𝑐,𝑑)=1 且 𝑞2=𝑐𝑑,此时输出{c}*sqrt({r})/{d};

  上述表示中 {n} 代表整数 {n} 的值,详见样例。

  如果方程有实数解,则按要求的格式输出两个实数解中的较大者。否则若方程没有实数解,则输出 NO。

【输入】

输入的第一行包含两个正整数 𝑇,𝑀,分别表示方程数和系数的绝对值上限。

接下来 𝑇 行,每行包含三个整数 𝑎,𝑏,𝑐。

【输出】

输出 T𝑇 行,每行包含一个字符串,表示对应询问的答案,格式如题面所述。

每行输出的字符串中间不应包含任何空格

【输入样例】

9 1000
1 -1 0
-1 -1 -1
1 -2 1
1 5 4
4 4 1
1 0 -432
1 -3 1
2 -4 1
1 7 1

【输出样例】

1
NO
1
-1
-1/2
12*sqrt(3)
3/2+sqrt(5)/2
1+sqrt(2)/2
-7/2+3*sqrt(5)/2

【提示】

【数据范围】

对于所有数据有:1≤T≤50001≤𝑇≤5000,1≤M≤1031≤𝑀≤103,∣a∣,∣b∣,∣c∣≤M∣𝑎∣,∣𝑏∣,∣𝑐∣≤𝑀,a≠0𝑎≠0。

测试点编号M≤特殊性质 A特殊性质 B特殊性质 C
11
220
3103
4103
5103
6103
7,8103
9,10103

其中:

特殊性质 A:保证 b=0;

特殊性质 B:保证 c=0;

特殊性质 C:如果方程有解,那么方程的两个解都是整数。

代码样例(要有耐心,有一点麻烦)

(时间总复杂度为 72ms (未任何优化))

                              

#include<bits/stdc++.h>
using namespace std;
int js,f[10005],num[10005];
int gcd(int x,int y)
{if(y==0) return abs(x);//确保最大公因数不为负数 return gcd(y,x%y);
}
void solve(int as)//求sqrt()里面的质因数 
{int j=2;while(as>1){if(as%j==0)f[++js]=j;while(as%j==0){num[js]++;as/=j;}j++;}
}
int main()
{ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n,m;cin>>n>>m;for(int i=1;i<=n;i++){int a,b,c;js=0;cin>>a>>b>>c;if(a<0)//确保a为正数 {a=-a;b=-b;c=-c;}int h=b*b-4*a*c;//sqrt()里面的值 if(h<0)//如果sqrt()里面小于0,即无解 {cout<<"NO"<<'\n';continue;//下次判断 }int sq=sqrt(h);if(sq*sq==h)//如果h可以直接开平方 {int yy=-b+sq;//求-b+sqrt(h) int xx=gcd(yy,2*a);//求最大公因数 yy=yy/xx;//化为最简 int y=2*a/xx;//化为最简 if(y==1)cout<<yy/y<<'\n';//防止出现想(2/1)这种情况 elsecout<<yy<<"/"<<y<<'\n';//输出 continue; //下次判断 }if(b>0)//说明-b是负数,但为了判断最大公因数,将b取绝对值 cout<<"-";b=abs(b);//确保b为正数 if(b!=0)//只有b有值,才有前面的部分 {int g=gcd(b,2*a);//求最大公因数 b=b/g;//化为最简 int hh=2*a/g;//化为最简 if(hh==1)//即不需要输出1 cout<<b/hh;elsecout<<b<<'/'<<hh;//输出分数 if(h==0)//即不存在后面的部分 {cout<<'\n';continue;//下次判断 }cout<<'+';//准备输出后面的部分 }memset(num,0,sizeof(num));solve(h);//求质因数 int df=1,fd=1;//df为sqrt()外面的数,fd为sqrt()里面的数 for(int i=1;i<=js;i++){if(num[i]>1)//即可以将f[i]取出来 {df*=pow(f[i],num[i]/2);//df乘以f[i] if(num[i]%2==1)//如果num[i]为奇数,即在sqrt()会留下一个f[i] fd*=f[i];//乘以f[i] }elsefd*=f[i];//乘以f[i] }int g1=gcd(df,2*a);//算最大公因数 df=df/g1;//化为最简 int hh1=2*a/g1;//化为最简 if(df!=1)//如果为1,则不需要输出 cout<<df<<'*';cout<<"sqrt(";cout<<fd<<')';//输出fd if(hh1!=1)//如果为1,(分母为1,不需要输出) cout<<'/'<<hh1;cout<<'\n';}return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456036.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【功能介绍】在信创终端上查看系统的硬盘序列号以及USB设备的VID和PID _ 统信 _ 麒麟 _ 方德

往期好文&#xff1a;【系统配置】命令行修改统信UOS的grub启动延时 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在信创终端上查看系统的硬盘序列号以及USB设备的VID和PID的文章。在日常使用中&#xff0c;查看硬盘的序列号以及USB设备的VID&#xff08;…

电脑篇——Windows设置文件夹只读功能(高级篇)

使用背景&#xff1a; 某工厂产线上的Windows电脑里面有一些生产测试软件在指定的文件夹中&#xff08;下文中称为文件夹A&#xff09;。为了防止普通职工随意修改、删除、替换文件&#xff0c;对生产软件版本管控产生不可控因素&#xff0c;我们需要给文件夹A添加保护&#xf…

基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)

目录 1. 延迟关闭订单 1.1 订单延时关闭功能技术选型 1.1.1 定时任务 1.1.2 RabbitMQ 1.1.3 Redis 过期监听 1.1.4 Redisson 1.1.5 RocketMQ 1.2 RocketMQ订单延时关闭发送方实现 1.3 RocketMQ订单延时关闭的消费方实现 1. 延迟关闭订单 用户发起订单后&#xff0c;如…

2023 ICPC 亚洲澳门赛区赛 D. Graph of Maximum Degree 3

题目 题解 #include <bits/stdc.h> using namespace std; // #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long long #define pii pair<int, int> #defi…

Spring--4

SpringWeb 概念 是Spring框架的一个模块&#xff0c;基于Servlet的一个原始Web框架。 SpringWEB 运行流程 描述&#xff1a;前端用户请求发送的后端以后&#xff0c;先经过前端控制器DispatcherServlet(再次之前也可能有过滤器的存在)&#xff0c;经过前端控制器解析后&…

一起搭WPF架构之LiveCharts.Wpf的简单了解与安装

一起搭WPF架构之LiveCharts.Wpf的简单了解与安装 前言LiveCharts.Wpf介绍LiveCharts.Wpf的安装总结 前言 根据项目需求&#xff0c;我单独留了一个界面用于进行数据分析。数据分析的内容考虑是采用图表的形式将SQLite数据库中存储的数据进行绘制成图&#xff0c;以便数据分析。…

第三十一篇:TCP协议如何解决丢包的问题,TCP系列六

前面我们说TCP协议是可靠的、基于字节流、面向连接的传输层通信协议&#xff1b; 这里我想换种说法&#xff1a;与其说是TCP协议是可靠的&#xff0c;不如说传输层程序软件实现了TCP协议的规范&#xff08;网络层次模型&#xff0c;每一层都有对应的程序软件&#xff09;&…

33 类与对象 · 下

目录 一、构造函数的深入 &#xff08;一&#xff09;构造函数的其他特点 &#xff08;二&#xff09;使用例 1、Date类与Time类显示写 2、Date类与Time类写一部分 &#xff08;三&#xff09;总结 &#xff08;四&#xff09;初始化顺序小题目 二、类型转化 &#xff…

【芯片设计】DC综合retiming策略的学习与实践

对于DC综合中的retiming策略早有耳闻&#xff0c;但是一直没有比较系统的学习和实验过&#xff0c;正好借着这次交付过程的归纳总结机会&#xff0c;把一些零零散散的收获学习记录下。 记得刚出新手村时和某位大佬聊到过&#xff0c;他说你逻辑里写了在某级计算一个结果&#…

UE5之5.4 第一人称示例代码阅读2 子弹发射逻辑

TP_WeaponComponent.h 看看头文件 暴露了attach weapon和fire给蓝图 这两个函数意义一看名字吧&#xff0c;就是捡起来枪的时候执行&#xff0c;一个就是发射子弹的时候执行 #pragma once#include "CoreMinimal.h" #include "Components/SkeletalMeshComponen…

Appium中的api(二)

目录 元素定位操作api 1--通过id定位api 2--通过class获取定位元素 3--通过xpath表达式定位元素 4.完整代码 解释 效果 元素定位操作api 1--通过id定位api 注:driver.find_element是获取单个元素 # 通过id获取 mySearchId "com.android.settings:id/search_acti…

如何对pdf文件进行加密?pdf文件加密全攻略与深度解析(5个方法)

如何对pdf文件进行加密&#xff1f; 只见&#xff0c;在深夜的情报局里&#xff0c;特工小李将一份绝密PDF文件放在保险箱内&#xff0c;以为这样就天衣无缝了。 细细推敲&#xff0c;漏洞百出&#xff1a; 如果钥匙被盗呢&#xff1f;如果被神匠破解出密码呢&#xff1f;如果…

Halcon基础-瓶盖带角度的OCR批量识别

Halcon基础-OCR识别 1、OCR识别素材2、创建路径文件3、Halcon代码实现4、运行效果5、资源获取 1、OCR识别素材 这里我准备了7张不同角度的OCR图片&#xff0c;如下所示&#xff1a; 2、创建路径文件 按照下图所示创建全部文件夹和文件&#xff1a; 01用来存放OCR识别原图 c…

Vue中使用el-upload实现文件上传时控制提交按钮状态的最佳实践

在Web应用开发中&#xff0c;文件上传是一个常见的需求。在使用Vue框架和Element UI库时&#xff0c;我们经常使用el-upload组件来处理文件上传。但是&#xff0c;如何在上传过程中控制提交按钮的可用状态&#xff0c;以避免在上传未完成时误触提交操作&#xff0c;是一个值得探…

解决:如何在opencv中得到与matlab立体标定一样的矫正图?(python版opencv)

目的&#xff1a;采用一样的标定参数&#xff0c;matlab中和opencv中的立体矫正图像是一样的吗&#xff1f;不一样的话怎么让它们一样&#xff1f; 结论&#xff1a;不一样。后文为解决方案。 原因&#xff1a;注意matlab的标定结果在matlab中的用法和在opencv中的用法不一样&a…

光伏电站折旧率的计算

折旧率的计算方法 直线法&#xff1a;直线法是最常用的折旧计算方法。它假设光伏设备在使用寿命内每年的折旧额保持不变。计算公式为&#xff1a; 折旧率(资产原值-净残值)预计使用寿命。 其中&#xff0c;资产原值是指光伏设备购置价值或建成投产时的价值&#xff1b;净残值…

chrome清除https状态

莫名其妙的http跳转到https的url了。 解决办法 浏览器地址栏输入&#xff1a;chrome://net-internals/#hsts 输入你需要删除的域名即可&#xff01;&#xff01;&#xff01;

AMD平台,5600X+6650XT,虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)

macOS 15 Sequoia终于出正式版了&#xff0c;没有Mac&#xff0c;所以还是虚拟机玩玩&#xff0c;还是属于折腾&#xff0c;安装过程和之前差不多&#xff0c;这次我从外网获得了8核和16核openCore&#xff0c;分享一下。 提前发一下ISO镜像地址和openCore引导磁盘地址 ISO镜…

《人工智能往事》—— 简而言之,AI 已经包围了我们。AI 就是我们。

《人工智能往事》这本书我挺喜欢的&#xff08;推荐给对计算机和AI史有考古兴趣的同学们&#xff09;。我是几年前读的英文版《This Could Be Important: My Life and Times with the Artificial Intelligentsia Pamela McCorduck》很高兴发现国内推出了译本。 作者帕梅拉麦考…