完全平方数

Posted fate-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完全平方数相关的知识,希望对你有一定的参考价值。

技术图片

 

 

 

 

动态规划

对一个数字n来说,组成n的完全平方数的最少个数等于n减去i*i(i*i<=n)后对应的那个数的完全平方数的最少个数加1.

所以我们从一开始来找组成完全平方数的最少个数,一直找到n,

举个栗子

1  1>=1*1,1-1*1=0,组成0的完全平方数的最少个数为0,加1后变1,所以组成1的完全平方数的最少个数为1

2  2>=1*1,2-1*1=1,组成1的完全平方数的最少个数为1,加1后变2,所以组成2的完全平方数的最少个数为2

3  3>=1*1,3-1*1=2,组成2的完全平方数的最少个数为2,加1后变3,所以组成3的完全平方数的最少个数为3

4  4>=1*1,同时,4也>=2*2,这时,将这两种情况分开来讨论,取最小值,

第一种情况,4>=1*1,4-1*1=3,组成3的完全平方数的最少个数为3,加1后变为4,

第二种情况,4>=2*2,4-2*2=0,组成0的完全平方数的最少个数为0,加1后变为1,

由此可得,最小值为1,所以,组成4的完全平方数的最少个数为1

5  5>=1*1,同时,5也>=2*2,这时,将这两种情况分开来讨论,取最小值

第一种情况,5>=1*1,5-1*1=4,组成4的完全平方数的最少个数为1,加1后变为2

第二种情况,5>=2*2,5-2*2=1,组成1的完全平方数的最少个数为1,加1后变为2

由此可得,最小值为2,所以,组成4的完全平方数的最少个数为2

就这样依此类推,理解代码

 

技术图片
 1 #include<iostream>
 2 #include<fstream>
 3 #include<vector>
 4 #define MAX 0x3f3f3f3f
 5 int mina;
 6 using namespace std;
 7 void num(int n){
 8     vector<int> ans;
 9     ans.push_back(0);
10     while(ans.size()<=n){
11         int m=ans.size();
12         mina=MAX;
13         for(int i=1;i*i<=m;i++){
14             mina=min(mina,ans[m-i*i]+1);
15         }
16         ans.push_back(mina);
17     }
18     cout<<ans.back();
19 
20 }
21 int main(){
22 //    fstream file("haha.txt");
23     int n;
24     cin>>n;
25 //    file>>n;
26     num(n);
27     return 0;
28 }
View Code

以上是关于完全平方数的主要内容,如果未能解决你的问题,请参考以下文章

大等于n的最小完全平方数

c语言程序:编写函数,判断一个正整数是不是为完全平方数,并输出100以内的完全平方数。

蓝桥杯每日一真题—— [蓝桥杯 2021 省 AB2] 完全平方数(数论,质因数分解)

BZOJ_2440_[中山市选2011]完全平方数_容斥原理+线性筛

Python经典练习题1:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

完全平方数