首页 > 代码库 > 平方求和
平方求和
描述
对于一个非负整数n,最少需要几个完全平方数,使其和为n?
输入
输入包含多组数据。对于每组数据:
第一行是n;如果n为-1,表示输入结束。(0 <= n <= 1000000001)
输出
针对每组数据,输出最少需要的完全平方数。
样例输入
3 4 5 -1
样例输出
3 1 2
#include <iostream> #include <algorithm> #include<math.h> #include <queue> using namespace std; bool is_sqrt(long long n) { int m = sqrt(n); if (m*m == n) return true; else return false; } int solve(long long n) { if (is_sqrt(n)) return 1; while (n % 4 == 0) n /= 4; if (n % 8 == 7) return 4; for (int i = 0; i*i < n; i++) { if (is_sqrt(n - i*i)) return 2; } return 3; } int main() { long long n; while (cin>>n) { if (n == -1) break; cout<< solve(n)<<endl; } return 0; }
有其它难的方法我没看懂,太菜了,只看懂这种,那个大神挺牛的
平方求和
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。