CF707C Pythagorean Triples 题解

news2024/10/6 6:46:38

CF707C Pythagorean Triples 题解

题目

链接

https://www.luogu.com.cn/problem/CF707C

字面描述

题面翻译

给出一个数字,要你求出另外的两个数使得这三个数构成勾股数

题目描述

Katya studies in a fifth grade. Recently her class studied right triangles and the Pythagorean theorem. It appeared, that there are triples of positive integers such that you can construct a right triangle with segments of lengths corresponding to triple. Such triples are called Pythagorean triples.

For example, triples $ (3,4,5) $ , $ (5,12,13) $ and $ (6,8,10) $ are Pythagorean triples.

Here Katya wondered if she can specify the length of some side of right triangle and find any Pythagorean triple corresponding to such length? Note that the side which length is specified can be a cathetus as well as hypotenuse.

Katya had no problems with completing this task. Will you do the same?

输入格式

The only line of the input contains single integer $ n $ ( $ 1<=n<=10^{9} $ ) — the length of some side of a right triangle.

输出格式

Print two integers $ m $ and $ k $ ( $ 1<=m,k<=10^{18} $ ), such that $ n $ , $ m $ and $ k $ form a Pythagorean triple, in the only line.

In case if there is no any Pythagorean triple containing integer $ n $ , print $ -1 $ in the only line. If there are many answers, print any of them.

样例 #1

样例输入 #1

3

样例输出 #1

4 5

样例 #2

样例输入 #2

6

样例输出 #2

8 10

样例 #3

样例输入 #3

1

样例输出 #3

-1

样例 #4

样例输入 #4

17

样例输出 #4

144 145

样例 #5

样例输入 #5

67

样例输出 #5

2244 2245

提示

Illustration for the first sample.

思路

纯数学题

体面很好理解,就是给你一个数 n n n求另外2个数能与它构成勾股数。

勾股数: a 2 + b 2 = c 2 a^2+b^2=c^2 a2+b2=c2
n n n可能为 a , b , c a,b,c a,b,c

给2个数求1个很好办,几个 i f if if的事情,但1个求2个没有任何关系的量这个问题对我来说很未知

数学上遇到一个未知的问题先根据数的界或性质分类(引用至胡老师语录(初中数学老师))
胡老师语录
∵本人有一点点因式分解的基础
∴突然想到了平方差公式

我可以把 n n n当成 a a a
a 2 = c 2 − b 2 a^2=c^2-b^2 a2=c2b2
a 2 = ( c − b ) ( c + b ) a^2=(c-b)(c+b) a2=(cb)(c+b)

已经推到这里,但是还不能得出任何结论,根据数性,我将 a a a分成2类:

  1. 奇数
  2. 偶数

a 为奇数 a为奇数 a为奇数
∵ b 、 c 均为整数 \because b、c均为整数 bc均为整数
∴ ( c − b ) = 1 , ( c + b ) = a 2 \therefore (c-b)=1,(c+b)=a^2 (cb)=1,(c+b)=a2
∴ b = ( a 2 − 1 ) / 2 , c = ( a 2 + 1 ) / 2 \therefore b=(a^2-1)/2,c=(a^2+1)/2 b=(a21)/2,c=(a2+1)/2
a = 1 时无解 a=1时无解 a=1时无解
ok,奇数搞定

a 为偶数 a为偶数 a为偶数
根据等式性质,假设 a a a x x x个2可提,设 c n t = a / ( 2 x ) cnt=a/(2^x) cnt=a/(2x)

奇数的前面已经推出来了,只需要代入奇数的推一遍,最后在乘上 2 x 2^x 2x
∴ b = ( c n t 2 − 1 ) / 2 ⋅ 2 x , c = ( c n t 2 + 1 ) / 2 ⋅ 2 x \therefore b=(cnt^2-1)/2·2^x,c=(cnt^2+1)/2·2^x b=(cnt21)/22x,c=(cnt2+1)/22x

但是如果 c n t = 1 cnt=1 cnt=1就不妙了, ∵ a = 1 无解 \because a=1 无解 a=1无解
应最朴素的方式观察一下:3,4,5 这一组例子 非常的好观察到用 n n n表示4就可以了;
∴ b = 3 ⋅ 2 \therefore b=3·2 b=32x-2 , c = 5 ⋅ 2 ,c=5·2 ,c=52x-2

时间复杂度分析
n n n为奇数时, 时间复杂度: ο ( 1 ) \omicron(1) ο(1)
n n n为偶数时, 时间复杂度: ο ( l o g 2 ( n ) ) \omicron(log2(n)) ο(log2(n))

代码实现

#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll x;
int main(){
	scanf("%lld",&x);
	if(x%2==1){
		if(x==1){
			printf("-1\n");
			return 0;
		}
		x*=x;
		printf("%lld %lld\n",x/2,x/2+1);
	}
	else {
		if(x==2){
			printf("-1\n");
			return 0;
		}
		ll cnt=0;
		while(x%2==0){
			++cnt;
			x/=2;
		}
		if(x!=1){
			x*=x;
			ll r=(ll)pow(2,cnt);
			printf("%lld %lld\n",x/2*r,(x/2+1)*r);
		}
		else{
			cnt-=2;
			ll r=(ll)pow(2,cnt);
			printf("%lld %lld\n",3*r,5*r);
		}
	}
	return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度卷积对抗神经网络 进阶 第一部分 GANs 在数据增强和隐私领域的应用 GANs for Data Augmentation and Privacy

深度卷积对抗神经网络 进阶 第一部分 GANs 在数据增强和隐私领域的应用 GANs for Data Augmentation and Privacy GANs可以创造性地生成数据&#xff0c;这样就可以用在数据增强领域&#xff0c;在某些缺乏数据的行业认为地添加数据。此外&#xff0c;生成的数据如果用于神经网…

365天深度学习训练营-第J3周:DenseNet算法实战与解析

目录 一、前言 二、论文解读 1、DenseNet的优势 2、设计理念 3、网络结构 4、与其他算法进行对比 三、代码复现 1、使用Pytorch实现DenseNet 2、使用Tensorflow实现DenseNet网络 四、分析总结 一、前言 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习…

如何使用 ESP-PROG 板的 Program 接口为 ESP32-S3-WROOM-1 系列的模组烧录固件?

ESP-PROG 是一款乐鑫推出的开发调试工具&#xff0c;具有自动下载固件、串口通信、JTAG 在线调试等功能。具体使用说明参见&#xff1a;ESP-Prog 下载与调试板介绍 。 ESP-Prog 采用 FTDI 公司的 FT2232HL 为 USB Bridge Controller 芯片&#xff0c;可通过配置将 USB 2.0 接口…

嵌入式开发:如何将嵌入式代码库从C转换为C++?

几十年来&#xff0c;嵌入式软件工程师们一直在争论是否应该使用C替代C语言进行开发工作。56%的嵌入式软件是用C语言编写的。然而&#xff0c;C已经逐渐普及&#xff0c;大约23%的新嵌入式软件项目都是用C编写的。那么&#xff0c;嵌入式开发人员要如何将嵌入式代码库从C转换为…

基于RK3399+Linux QT地面测试台多参数记录仪测试平台软件设计

随着高科技技术在现代化战争中日益重要作用&#xff0c;飞行装备的研制亦从单元体制发展 到多元体制。航空装置系统在设计过程中&#xff0c;需要大量测试工作&#xff0c;尤其是需要把系统研制 和飞行试验中各部分工作状态参数实时记录&#xff0c;用以分析、改进设计。记录仪…

006 金融工具库funcat安装教程及异常处理

funcat库集合了同花顺、通达信等的常用公式&#xff0c;安装后可以直接使用公式制定策略。 funcat常用公式可参考github说明&#xff1a;GitHub - cedricporter/funcat: Funcat 将同花顺、通达信、文华财经麦语言等的公式写法移植到了 Python 中。 常见异常&#xff1a; 使用…

干货解答:如何设置Facebook Messenger 自动回复?

Facebook Messenger 自动回复消息是提升客户体验的有效方法。在本文中&#xff0c;我们将探讨设置Facebook 自动响应和不同的创建方法 Facebook 自动回复。另外&#xff0c;我们准备了一些最受欢迎的 Facebook Messenger 自动回复消息。Facebook Messenger 自动回复&#xff1a…

Kafka消费分组和分区分配策略

Kafka消费分组&#xff0c;消息消费原理 同一个消费组里的消费者不能消费同一个分区&#xff0c;不同消费组的消费组可以消费同一个分区 &#xff08;即同一个消费组里面的消费者只能在一个分区中&#xff09; Kafka分区分配策略 问题 用过 Kafka 的同学用过都知道&#xf…

idea启动报错If you already have a 64-bit JDK installed, define a JAVA HOME variable

IDEA启动报错&#xff0c;如下图所示&#xff1a; 解决方法&#xff1a; 1.根据以下路径找到文件idea64.exe.vmoptions &#xff0c;路径如下图所示&#xff1a; C:\Users\Thinkpad\AppData\Roaming\JetBrains\IntelliJIdea2020.3\idea64.exe.vmoptions 其中Thinkpad是电脑的…

0401不定积分的概念和性质-不定积分

文章目录1 原函数与不定积分的概念1.1 原函数1.2 原函数存在定理1.3 不定积分2 不定积分的性质3 基本积分表4 例题后记1 原函数与不定积分的概念 1.1 原函数 定义1 如果在区间I上&#xff0c;可导函数F(x)的导航为f(x)&#xff0c;即对任一x∈Ix\in Ix∈I&#xff0c;都有 F′…

ubuntu转储coredump

方法一&#xff1a; 输入以下命令即可,其中${USER}为自己电脑的用户名&#xff1a; ulimit -c unlimited echo "/home/${USER}/core.%p" > /proc/sys/kernel/core_pattern 方法二&#xff1a; Disable apport : sudo systemctl stop apport.servicesudo system…

【Git】Git的分支操作

目录 4、 Git 分支操作 4.1 什么是分支 4.2 分支的好处 4.3 分支的操作 4、 Git 分支操作 4.1 什么是分支 在版本控制过程中&#xff0c; 同时推进多个任务&#xff0c; 为每个任务&#xff0c; 我们就可以创建每个任务的单独分支。 使用分支意味着程序员可以把自己的工作…

98%的程序员,都没有研究过JVM重排序和顺序一致性

文章整理自 博学谷狂野架构师 重排序 数据依赖性 如果两个操作访问同一个变量&#xff0c;且这两个操作中有一个为写操作&#xff0c;此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型&#xff1a; 名称代码示例说明写后读a 1;b a;写一个变量之后&#xff0c;再…

YOLOv5改进、YOLOv7改进IoU损失函数:YOLOv7涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数

&#x1f4a1;该教程为改进入门指南&#xff0c;属于《芒果书》&#x1f4da;系列&#xff0c;包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容&#x1f680; &#x1f4a1;本篇文章 基于 YOLOv5、YOLOv7芒果改进YOLO系列&#xff1a;YOLOv7改进IoU损失函数&am…

[手把手教你]实现简单的登录跳转以及tab栏的动态渲染

需求:实现login登录页输入用户名和密码, 匹配失败显示提示信息, 成功则跳转到index主页index页面中各组件通过嵌套路由实现,点击一级菜单可以动态显示二级菜单1.使用vite搭建项目安装初始化npm init vuelatest选择配置进入项目目录,安装模块npm i, 启动项目npm run dev2.项目目…

【答疑现场】我一个搞嵌入式的,有必要学习Python吗?

【答疑现场】我一个搞嵌入式的&#xff0c;有必要学习Python吗&#xff1f; 文章目录1 写在前面2 一个结论3 Python在嵌入式领域能干啥事4 Python是用来干大事的5 友情推荐6 福利活动大家好&#xff0c;我是架构师李肯&#xff0c;一个专注于嵌入式物联网系统架构设计的攻城狮。…

FPGA纯vhdl实现MIPI CSI2 RX视频解码输出,OV13850采集,提供工程源码和技术支持

目录1、前言2、Xilinx官方主推的MIPI解码方案3、纯Vhdl方案解码MIPI4、vivado工程介绍5、上板调试验证6、福利&#xff1a;工程代码的获取1、前言 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了&#xff0c;MIPI解码难度之高&#xff0c;令无数英雄竞折腰…

Hive---浅谈Hive

浅谈Hive 文章目录浅谈HiveHive文件映射Hive组件元数据&#xff08;Metadata&#xff09;元数据存储元数据服务&#xff08;Metastore&#xff09;Metastore配置方式Metastore远程模式Hive启动方式第一种&#xff08;本地&#xff09;第二种beelineHive Apache Hive作为一款大…

电子作业指导书系统能树立良好的生产形象

“制造”就是以规定的成本、规定的工时、生产出品质均匀、符合规格的产品。从全球新能源汽车的发展来看&#xff0c;其动力电源主要包括锂离子电池、镍氢电池、铅酸电池、超级电容器&#xff0c;其中超级电容器大多以辅助动力源的形式出现。那么&#xff0c;电子作业指导书系统…

吐血整理AutoSAR Com-Stack 的配置【基于ETAS】

总目录链接>> AutoSAR入门和实战系列总目录 文章目录01.软件组件和系统说明02.基本软件配置03.系统数据映射04.代码生成05.代码整合06.测试下图显示了基于 AUTOSAR 的 ECU SW 的结构。纵观BSW&#xff0c;大体分为三层。三层模块中&#xff0c;与通信相关的模块称为通信…