一中OJ #1176 立方数分解[尼科梅彻斯定理] | 数论 + 枚举 | 解题报告
来源:互联网 发布:电子画板手绘软件 编辑:程序博客网 时间:2024/05/14 06:38
一中OJ | #1176 立方数分解[尼科梅彻斯定理]
时限 1000MS/Case 内存 64MB/Case
题目描述
任何一个正整数的立方都可以写成一串奇数之和,这就是著名的尼科梅彻斯定理。
给出 N,求 N 的立方是哪 N 个连续奇数之和,要求第1个奇数尽量小。
输入格式
一个正整数N。
输出格式
连续奇数相加等于立方的算式。
样例输入
3
样例输出
7+9+11=27
数据范围
1 <= N <= 100
----------------------------------------------------------
题目分析
百度百科上写着,对于某数N,尼科梅彻斯定理算式开始的数为N^2-N+1
那么问题来了,题目要求开始的数最小
比如N=4,当开始的数为N^2-N+1时,4^3=(4*4-4+1)+15+17+19=64
那么题目描述里面的4^3=1+3+5+7+9+11+13+15=64怎么破呢
于是作为数论蒟蒻的我就开始推了
根据尼科梅彻斯定理,N^3=一串连续奇数之和
设该串连续奇数首项为A,末项为B,项数为C,B+A=D,B-A=E,那么N^3=(B+A)*C/2
因为A为奇数,B为奇数,B+A为偶数,那么D为偶数
从2开始枚举D,那么C=N^3*2/D,得到C
同时可以证明对于某连续奇数序列,C=E/2+1(我想这个应该是谁都会证了)
那么E=(C-1)*2
现在就得到五元一次方程组辣(N是已知数)
{
E=(C-1)*2
C=N^3*2/D
B+A=D
B-A=E
}
这个时候枚举D,就可以求出C与E
还剩下一个二元一次方程组(E和D都是已知数)
{
B-A=E
B+A=D
}
那么解出来,B=(E+D)/2,A=D-B
如果A,B均为奇数,并且A>0,那么一种解就找出来了,输出它
因为从2开始枚举D,那么一定能得到A+B的最小值,进而能求出最大的C(C越大,D就越小,B=A+(C-1)*2,那么D=2*(A+C-1),因为D最小,C最大,那么A肯定最小),就是题目要求的最优解
----------------------------------------------------------
代码
#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <set>#include <map>#include <queue>#include <stack>#include <vector>#include <cctype>#include <iomanip>using namespace std;int n,sum,cuberes,elenum,sx,mx;int main(){scanf("%d",&n);if(n==1){printf("1=1\n");return 0;}cuberes=n*n*n*2;for(int i=2;i<=cuberes;i+=2){if(cuberes%i!=0) continue;else{elenum=cuberes/i;elenum=2*(elenum-1);//混用一下变量名应该没人发现 mx=(i+elenum)/2;sx=i-mx;if(sx>0 && mx>0)if(sx%2==1 && mx%2==1){for(;sx<mx;sx+=2) printf("%d+",sx);printf("%d=%d\n",sx,n*n*n);return 0;}}}return 0;}
- 一中OJ #1176 立方数分解[尼科梅彻斯定理] | 数论 + 枚举 | 解题报告
- 一中OJ #3167 排列组合数计算[2] | 高级数论 组合计数 | 解题报告
- 一中OJ #1194 数独 | 回溯 + 搜索 | 解题报告
- 【数论】MMT数解题报告
- 一中OJ #3514 礼物 | 暴搜 + 剪枝 | 解题报告
- 一中OJ #1438 航线设计 | LIS 序列DP | 解题报告
- 数论-唯一分解定理
- [数论]唯一分解定理
- 立方数(枚举)
- 一中OJ #1193 倒水问题[1] | IDDFS-迭代加深 + 二分猜答案 | 解题报告
- 一中OJ #1151 [USACO Jan08] 化妆晚会 | 排序与查找 | 解题报告
- 一中OJ #1086 最大子矩阵 | 贪心连续子序列 + 平面降维压缩 | 解题报告
- 一中OJ #1341 均分纸牌 [NOIP 2002T1] | 贪心 | 解题报告
- 一中OJ #3509 七的倍数 [USACO Jan16,洛谷P3131] | 同余前缀和 | 解题报告
- 一中OJ #1735 藏宝图 | 棋盘Multi_SSP 多源最短路径 BFS | 解题报告
- poj1753解题报告(枚举、组合数)
- 唯一分解定理(数论)
- 洛谷 1869 愚蠢的组合数 Lucas定理 解题报告
- 使用RecylerView实现瀑布流图片
- Python中通过csv的writerow输出多余空行+py2.x &py3.兼容
- Python判断一个文件夹内哪些文件是图片
- machine learning normal equation
- 机器学习实战-14利用SVD简化数据-改进推荐系统
- 一中OJ #1176 立方数分解[尼科梅彻斯定理] | 数论 + 枚举 | 解题报告
- Qt5.5 使用smtp发邮件的各种坑
- DOM、鼠标、表单、多媒体事件
- springmvc 数据绑定
- Linux CentOS7 简单了解
- 什么是P问题、NP问题和NPC问题
- Spring——使用profile为不同环境创建bean
- @InitBinder注解使用
- llvm存取fs段内容