【问题标题】:Calculate number of perfect squares in a given big range in C计算C中给定大范围内的完美平方数
【发布时间】:2015-09-26 14:21:24
【问题描述】:

我已经有了计算 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 上。如果不使用处理非常大数字的外部库,我想不出一个解决方案。

【问题讨论】:

  • 为什么要计算1到10^1000之间的完美平方数?
  • 你需要一个量子工作站,但为了简化我建议你绕道而行的方式,意味着它是方形的,不要扎根它。当数字似乎离开边界时使用模数。

标签: c


【解决方案1】:

如果您只需要计算1..N 之间有多少个完美平方,您只需:取N 的平方根并得到它的整数值:)

想想吧。对于1..10 范围,正确答案是3149),顺便说一下,这是向下舍入的sqrt(10)。如果您不想将 1 算作完美的正方形 - 好吧,别算了。

通常,要查看M..N 范围内有多少“完美正方形”,您需要做的就是:

(int)sqrt(N) - (int)sqrt(M) - 1

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

【讨论】:

  • Cuius rei demoem mirabilem sane detexi hanc marginis exiguitas non caperet. :)
【解决方案2】:
  • 任意范围之间的完美正方形的数量没有暴力破解

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

  • 对于任何其他范围,只需尝试使用算术尽可能缩小范围,然后使用模将合理的值存储在 int32 寄存器中。

【讨论】:

    【解决方案3】:

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

    否则有The GNU MP Bignum Library

    【讨论】:

      【解决方案4】:
      scanf("%d%d",&l,&u);
          x=floor(sqrt(u))-ceil(sqrt(l))+1;
          printf("%d\n",x);
      

      【讨论】:

      • 仅供参考:此答案因其长度和内容而被标记为低质量。您可能希望通过添加有关如何回答 OP 问题的更多信息来改进它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多