四平方和

四平方和定理,又称为拉格朗日定理:

每个正整数都可以表示为至多 4 个正整数的平方和。

如果把 0 包括进去,就正好可以表示为 4 个数的平方和。

比如:

\(5=0^2+0^2+1^2+2^2\)

\(7=1^2+1^2+1^2+2^2\)

对于一个给定的正整数,可能存在多种平方和的表示法。

要求你对 4 个数排序:

\(0≤a≤b≤c≤d\)

并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法。

输入格式

输入一个正整数 N。

输出格式

输出4个非负整数,按从小到大排序,中间用空格分开。

数据范围

\(0<N<5∗106\)

输入样例:

5

输出样例

0 0 1 2

思路

  1. 暴力
  2. 二分(见二分模板题

Code

1.暴力(11/12 TLE)

点击查看代码
#include<iostream>
#include<cmath>
using namespace std;
int n; int main(){
cin >> n;
for(int a = 0; a * a <= n; a ++){
for(int b = a; a * a + b * b<= n; b ++){
for(int c = b;a * a + b * b + c * c<= n; c ++){
int t = n - a * a - b * b - c * c;
int d = sqrt(t);
//cout << t << " " << d << endl;
if(d*d == t && d >= c){
printf("%d %d %d %d",a,b,c,d);
return 0;
}
}
}
}
}

2. 二分

点击查看代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define endl '\n'
using namespace std; const int N = sqrt(5*1e6) + 10;
typedef struct temp{
int c,d,s;
}temp;
int n;
temp t[N * N]; bool cmp(temp a,temp b){
if(a.s != b.s)return a.s < b.s; //二分前的预处理为有序
else if(a.c != b.c)return a.c < b.c;//维护答案要求的顺序
else return a.d < b.d;
}
bool check(int mid,int x){
int c = t[mid].c,d = t[mid].d;
if(c*c + d*d >= x)return 1;
else return 0;
}
int main(){
// ios::sync_with_stdio(false);
// cin.tie(0),cout.tie(0);
cin >> n;
int cnt = 0;
for(int c = 0; c * c <= n; c ++ ){ //预处理
for(int d = c; c * c + d * d <= n; d ++){
t[cnt ++] = {c,d,c * c + d * d};
}
} sort(t,t + cnt,cmp);
//for(int i = 0; i < cnt; i ++)printf("%d %d %d\n",t[i].c,t[i].d,t[i].s);
for(int a = 0; a * a <= n; a ++ ){ //优化为两层for循环+二分
for(int b = a; a * a + b * b <= n; b ++ ){
int x = n - a * a - b * b; //搜索值
int l = 0, r = cnt - 1; //搜索范围
while(l < r){
int mid = l + r >> 1;
if(check(mid,x))r = mid;
else l = mid + 1;
}
int c = t[l].c,d = t[l].d; //注意这里是l或者r而不是mid
if(x == c*c + d*d && b <= c){ //维护答案要求的顺序
printf("%d %d %d %d",a,b,c,d); //按格式输出
return 0;
}
}
}
return 0;
}

四平方和【第七届蓝桥杯省赛C++A/B组,第七届蓝桥杯省赛JAVAB/C组】的更多相关文章

  1. java算法 第七届 蓝桥杯B组(题+答案) 8.四平方和

    8.四平方和  (程序设计) 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和.如果把0包括进去,就正好可以表示为4个数的平方和. 比如:5 = 0^2 + 0^2 + ...

  2. 第七届蓝桥杯javaB组真题解析-四平方和(第八题)

    题目 /* 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1 ...

  3. java实现第七届蓝桥杯四平方和

    四平方和 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^ ...

  4. 蓝桥杯-四平方和-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  5. 蓝桥杯比赛javaB组练习《四平方和》

    四平方和 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和.如果把0包括进去,就正好可以表示为4个数的平方和. 比如:5 = 0^2 + 0^2 + 1^2 + 2^27 ...

  6. 2016蓝桥杯省赛C/C++A组第八题 四平方和

    题意: 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^2 + 2^ ...

  7. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  8. 7-Java-C(四平方和)

    题目描述: 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^2 + ...

  9. 费马平方和定理&&斐波那契恒等式&&欧拉四平方和恒等式&&拉格朗日四平方和定理

    费马平方和定理 费马平方和定理的表述是:奇素数能表示为两个平方数之和的充分必要条件是该素数被4除余1. 1. 如果两个整数都能表示为两个平方数之和的形式,则他们的积也能表示为两个平方数之和的形式. $ ...

  10. 第七届蓝桥杯省赛javaB组 第七题剪邮票

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...

随机推荐

  1. 一次 Redis 事务使用不当引发的生产事故

    这是悟空的第 170 篇原创文章 官网:http://www.passjava.cn 你好,我是悟空. 本文主要内容如下: 一.前言 最近项目的生产环境遇到一个奇怪的问题: 现象:每天早上客服人员在后 ...

  2. 7.pyagem-游戏背景

    背景交替滚动 游戏启动后,背景图像不断的向下移动 在视觉上产生角色不断向上移动的错觉 游戏背景不断变化,游戏主角的位置报错不变   实现方案 创建两张背景图 第一张完全和屏幕重合,第二章在屏幕的正上方 ...

  3. a标签添加链接下划线样式

    <a href="/aaaa.asp" target="_blank" style="text-decoration:underline;&qu ...

  4. 十二、Pod的NameSpace

    Pod 的 NameSpace 一.Pod 的 NameSpace 使用 kubectl 管理命名空间及其包含的资源相当简单.在这一节中,我们将演示一些最常见的命名空间操作,便于你开始有效地分割资源. ...

  5. node 创建服务器方法

    方法一 let http = require('http') let httpserver = http.createServer(function(req,res){ res.writeHead(2 ...

  6. LoadRunner11脚本小技能之添加请求头+定义变量+响应内容乱码转换打印+事务拆分

    一.添加请求头 存在一些接口,发送请求时需要进行权限验证.登录验证(不加请求头时运行脚本,接口可能会报401等等),所以需要在脚本中给对应请求添加请求头.注意:请求头需在请求前添加,包含url类.su ...

  7. 如何通过Java导出带格式的 Excel 数据到 Word 表格

    在Word中制作报表时,我们经常需要将Excel中的数据复制粘贴到Word中,这样则可以直接在Word文档中查看数据而无需打开另一个Excel文件.但是如果表格比较长,内容就会存在一定程度的丢失,无法 ...

  8. VM安装Centos7操作系统

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 视频教程:https://live.csdn.ne ...

  9. Encodings: URL

    原题链接:http://www.wechall.net/challenge/training/encodings/url/index.php 题目信息:你的任务就是解码下面的东西.... 这个完全没难 ...

  10. SSH SCP 使用秘钥验证 登录

    从Win10连接到Ubuntu 22.04. 1. Win10 上生成秘钥公钥 ssh-keygen -t rsa -C "xxx@yyy.com" 2. Ubuntu 22.04 ...