为什么平方和公式和直接累加平方数结果不一样
这是平方和公式做的
#include<iostream>
using namespace std;
int main(){
long long a,b;
cin>>a>>b;
long long min=0;
for(long long i=a;i<=b;i++){
long long tst=sqrt(i);
if(tst*tst==i){
min=tst;
break;
}
}
long long max=0;
for(long long i=b;i>=a;i--){
long long tst=sqrt(i);
if(tst*tst==i){
max=tst;
break;
}
}
min-=1;
cout<<((max*(max+1)*(2*max+1))/6 - (min*(min+1)*(2*min+1))/6)%INT_MAX ;
}
//min是范围内第一个完全平方数,max是最后一个/就是只要我用平方和公式把1-max的平方和减去1-min-1的平方和就是范围内所有完全平方数和
这是累加完全平方数暴力做的
#include<iostream>
using namespace std;
long long llsqrt(long long a){
long long b=(long long)sqrt(a);
return b;
}
long long sqrtst(long long a,long long b){
if(a > b) return 0;
long long sum=0;
long long fst;
int s=0;
for(long long i=a;i<=b;i++){
long long tst=(long long)sqrt(i);
if(tst*tst==i){
fst=i;
s=1;
break;
}
}
if(s==0){
return 0;
}
for(long long i=fst;i<=b;i+=llsqrt(i)*2+1){
sum+=i;
sum%=INT_MAX;
}
return sum;
}
int main(){
long long a,b;
cin>>a>>b;
cout<<sqrtst(a,b);
}
/*原理是两个完全平方数之间是连续奇数关系也就是假设完全平方数a是b的平方 则下一个完全平方数是a+2b+1
当然也可以直接sqrt(a)+1平方
*/
两个我都模了INT_MAX也就是2^31-1但是当我把测试点变成1 10000000000000时两个代码之间偏差了2
也就是说有一个代码逻辑错了或者说有什么地方超出了,所以到底我没考虑到哪里(如果我在平方和公式计算过程中模偏差更大)
...全文
相关推荐
python判断完全平方数的方法
今天小编就为大家分享一篇python判断完全平方数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
易语言高级表格置累加公式和置计算公式应用
易语言高级表格置累加公式和置计算公式应用源码,高级表格置累加公式和置计算公式应用
Java计算一个数加上100是完全平方数,加上168还是完全平方数
主要介绍了Java计算一个数加上100是完全平方数,加上168还是完全平方数,需要的朋友可以参考下
在 Word 中写出像 LaTeX 一样的公式
在 Word 中写出像 LaTeX 一样的公式。 Word中编辑数学公式的技巧(毕业论文排版必备),在Word中写出像LaTeX一样的的公式。 Word, LaTeX, 数学公式, 论文排版
高级表格置累加公式和置计算公式应用
高级表格置累加公式和置计算公式应用,源码是易语言的应用教程。 @易语言教程网。



