求出给定范围内的完美正方形的数量
finding the number of perfect squares in the given range
我正试图找出给定范围内的完美正方形的数量。我下面的方法提供在:digital_root
我实现的代码有时不能给出正确的答案,因为这种方法不考虑101000等数字。
请帮我算出这个方法。
int cot=0;
void squares(int a,int b){
if(a==b){
int digit,digit_root=0,no;
no=a;
digit=no%10;
if(digit==2||digit==3||digit==7||digit==8){
}else{
no=a;
while(no>0){
digit=no%10;
if((digit==0)||(digit==9)){
}else{
digit_root=digit_root+digit;
digit_root=digit_root%9;
}
no=no/10;
}
if(digit_root==0||digit_root==7||digit_root==1||digit_root==4){
if(digit_root==1){
if(a)
}
cot++;
}
}
}else{
int c=(a+b)/2;
squares(a,c);
squares(c+1,b);
}
}
int main() {
int a,b,t;
cin>>t;
for(int i=0;i<t;i++){
cin >> a>>b;
squares(a,b);
cout << cot<<endl;
cot=0;
}
return 0;
}
最好的算法可能是减去sqrt(bigger number) - sqrt(other num)
,即类似于这个
int a = 1,b=100;
if (sqrt(a) != int(sqrt(a)){
cout<<int(sqrt(b))-int(sqrt(a))<<endl;}
else{
cout<<int(sqrt(b))-int(sqrt(a))+1<<endl;}
逻辑很简单,完全平方是自然数*相同的自然数so,1*1,2*2,3*3,4*4等等
因此,您只需要获得较大num的最接近的完美sqrt,并将其与较小num相减(只是要小心,以防最小num本身是完美平方)
这里发生的事情太多了。简化它。写一个函数来确定一个数字是否是一个完美的正方形。把它做好。然后使用这个函数来确定你的范围内有多少个完美的正方形。这可能不应该是递归的;这太难理解了。使用覆盖范围的循环:
for (int i = a; i <= b; ++i)
if (is_perfect_square(i))
++count;
打印从1到N的数字很容易,数字将是完美的平方。
以下是检验完美平方的逻辑
/*function definition to check perfect square*/
int isPerfectSquare(int number)
{
int iVar;
float fVar;
fVar=sqrt((double)number);
iVar=fVar;
if(iVar==fVar)
return 1;
else
return 0;
}
您不需要所有这些昂贵的计算。这里的事情真的很简单。
不是从A循环到B并检查完美正方形,我们可以在O(1)处计算A的第一个整数平方根,并且以n次幂的简单增量来计算剩余的完美正方形,通过这种方式,我们可以避免昂贵的计算。
但更好的是,我们甚至可以通过使用天花板和地板来避免环路。例如,1000到2000之间的平方数:
sqrt(1000) = 31.6 --> ceil(31.6) --> 32
sqrt(2000) = 44.7 --> floor(44.7)--> 44
因此,这二加一的差就给出了完美平方的个数。
#include <cmath>
#include <iostream>
using namespace std;
int main() {
int A, B;
//get the range [A,B]
cin >> A >> B;
cout << floor(sqrt(B)) - ceil(sqrt(A)) + 1 << end;
return 0;
}
相关文章:
- 试试完美的正方形,你能给点小费吗
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 不计算一个范围内的完美数
- 完美前进使用 std::forward vs RefRefCast
- 如何编写一个完美的缩写函数模板?
- 将函数参数完美转发到函数指针:按值传递呢?
- C++20理念:要求表达和完美转发
- 完美的转发和构造函数
- 我可以列表初始化 std::vector 并完美转发元素吗?
- OpenGL绘制三角形而不是正方形
- 完美的广场与位明智和
- 返回值的完美转发?
- 使用衰减与完美转发
- 可变参数模板:将整数参数完美转发到 lambda
- 完美转发C++重载和模板化函子及其参数
- 在完美转发中需要衰减
- 我无法完全理解这段代码来检查一个完美的正方形
- 打印最大非完美正方形
- 求出给定范围内的完美正方形的数量
- 如果输入的数字不是完全正方形,则找到最接近的完美正方形