Perfect Squares
来源:互联网 发布:java管理系统界面 编辑:程序博客网 时间:2024/06/05 16:43
Description
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, …) which sum to n. For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.
解题思路:这道题可以用数学的方法来解决。首先我们要知道两个定理:第一,四平方和定理,每个正整数均可表示为4个整数的平方和;第二,三平方和定理,一个自然数能表示为三个数的平方和当且仅当它不能表示为4^k * (8 * m + 7),对于某个整数k和m。第二个定理启发我们当一个数能表示为4^k * (8 * m + 7),对于某个整数k和m成立时,它就能表示为4个数的平方和。因此,我们就知道了,一个数最多表示为4个数的平方和,所以只要分4种情况讨论即可。程序代码如下:
class Solution {public: int numSquares(int n) { int i = sqrt(n); if (i * i == n) return 1; for (int j = 0; j * j <= n; j++) { int l = sqrt(n - j * j); if (l * l + j * j == n) return 2; } int k = 0; while (true) { //n是否等于4^k*(8*m+7) int a = pow(4, k); if (a > n) break; if (n % a == 0) { if ((n / a - 7) % 8 == 0 ) return 4; } k++; } return 3; }};
0 0
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- 1022. Digital Library (30)
- 用anaconda的pip安装第三方python包
- 蓝桥 画表格
- Xcode磁盘空间大清理
- SQL 分割字符串和通用分页查询存储过程
- Perfect Squares
- 计算一个整数的阶乘
- hdu1520——Anniversary party(树形dp)
- 1023. Have Fun with Numbers (20)
- PAT 1068. 万绿丛中一点红(20)
- 商品属性表设计
- 短信验证
- python
- ajax-get方式提交到后台