计算C中给定大范围内的正方形数

时间:2015-09-26 14:21:25

标签: c

我已经有了代码,我计算了1到最大范围之间的完美平方数:

int perfectCounter = 0;
int i = 1;
int maxRange;

scanf("%d", &maxRange);

while (i <= maxRange) {
   float tempSquare = sqrt(i);
   int integerPart = tempSquare;

   if (tempSquare == integerPart)
      perfectCounter++;
}

问题是,最大范围必须介于1到10 ^ 1000之间,因此我无法将maxRange存储在int,long或long double上。我不能考虑解决方案,不使用处理非常大数字的外部库。

4 个答案:

答案 0 :(得分:3)

如果您只需计算 1..N之间有多少完美正方形,您需要做的是:取N的平方根并获取其整数值:)

想一想。对于1..10范围,正确答案为3149),顺便提一下,sqrt(10)1 。如果你不想把M..N算作一个完美的正方形 - 那就不要算了。

一般来说,要查看范围(int)sqrt(N) - (int)sqrt(M) - 1 中有多少“完美广场”,您需要做的就是:

hr.style-six {
    border: 0;
    height: 0;
    border-top: 1px solid rgba(0, 0, 0, 0.1);
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);
}

这应该很简单,因为你现在需要做的就是获得“非常大的数字”的平方根。你必须写一个函数,真的。但它不是太复杂,网上有很多资源可以帮助你。

答案 1 :(得分:2)

  • 任何范围之间的完美正方形数量没有强制执行

  • 在您的情况下,10 ^ 1000的平方根是10 ^(1000/2)= 10 ^ 500。这意味着 10 ^ 500 完美的正方形。

  • 对于任何其他范围,只要尝试使用算术来缩小它,然后使用modulo在int32寄存器中存储合理的值。

答案 2 :(得分:1)

如果您不想使用外部库,我建议您找到一种方法将数字存储在if数组中。你必须编写自己的算术函数。

否则就有The GNU MP Bignum Library

答案 3 :(得分:-1)

scanf("%d%d",&l,&u);
    x=floor(sqrt(u))-ceil(sqrt(l))+1;
    printf("%d\n",x);