【问题标题】:How many number of times x can be divided by y?x可以被y除多少次?
【发布时间】:2017-11-12 13:12:40
【问题描述】:

和x=12一样,可以除以y=2,2次(12/2=6,6/2=3)和12可以除以3,1次和12可以除以5, 0次。 这里 x 将是一个复合数,而 y 是一个素数。 java有内置函数吗?

是否有任何 O(1) 解决方案?

【问题讨论】:

  • 没有内置函数,但你可以像这样实现。这个想法不需要更多优化,因为它似乎可以在 O(log n) 中使用简单的 while 循环。
  • @SanketMakani 有任何 O(1) 解决方案吗?
  • 不,没有。这个算法应该是什么样子的?
  • 不,没有 O(1) 解决方案,但是当 n 无论如何不能超过 30 时,O(n) 几乎不是问题,通常在 1-3 左右。

标签: java math numbers primes


【解决方案1】:
public class Test {
  public static int howManyTimesDiv(int n, int div){
      int res=0;
      while(n%div==0){
           res++;
           n/=div;
      }
      return res;
  }

  public static void main(String[]args){
      int a=howManyTimesDiv(36, 2);
      System.out.println(a);//outputs 2
      int b=howManyTimesDiv(17, 3);
      System.out.println(b);//outputs 0
  }
}

【讨论】:

  • 为什么是循环条件n>0?要么在循环中始终为真,要么为假,所以它应该是一个if 语句。
  • while n>0 为真,直到 n/=div 大于 0。在此示例中为 36/2=18,18/2=9,9%2!=1 所以它打破了循环
  • 如果n>0n%div==0,那么n/div 也将永远是>0,所以如果n>0 最初为真,那么它将永远为真。 (假设div>0
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 2014-03-21
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
相关资源
最近更新 更多