📌  相关文章
📜  给定范围内具有奇数因子的元素数量的Java程序

📅  最后修改于: 2022-05-13 01:58:09.271000             🧑  作者: Mango

给定范围内具有奇数因子的元素数量的Java程序

给定一个范围 [ n , m ],找出在给定范围内(包括nm )具有奇数个因子的元素的数量。

例子:

Input  : n = 5, m = 100
Output : 8
The numbers with odd factors are 9, 16, 25, 
36, 49, 64, 81 and 100

Input  : n = 8, m = 65
Output : 6

Input  : n = 10, m = 23500
Output : 150

一个简单的解决方案是遍历从n开始的所有数字。对于每个数字,检查它是否有偶数个因数。如果它有偶数个因子,则增加这些数字的计数,最后打印这些元素的数量。要有效地查找自然数的所有除数,请参阅自然数的所有除数

一个有效的解决方案是观察模式。只有那些是完美正方形的数字才有奇数个因数。让我们通过一个例子来分析这种模式。

例如,9 有奇数个因数,1、3 和 9。16 也有奇数个因数,1、2、4、8、16。原因是,对于完全平方以外的数字,所有因数都是以对的形式,但对于完美的正方形,一个因素是单一的,使总数为奇数。

如何在一个范围内找到完美正方形的数量?
答案是mn-1 (不是 n ) 的平方根之间的差异
有一点需要注意。由于nm都包含在内,如果n是一个完美的平方,我们将得到一个小于实际答案的答案。要理解这一点,请考虑范围 [4, 36]。答案是 5,即数字 4、9、16、25 和 36。
但是如果我们做 (36**0.5) – (4**0.5) 我们得到 4。所以为了避免这种语义错误,我们取n-1

// Java program to count number of odd squares
// in given range [n, m]
  
import java.io.*;
import java.util.*;
import java.lang.*;
  
class GFG {
    public static int countOddSquares(int n, int m)
    {
        return (int)Math.pow((double)m, 0.5) - (int)Math.pow((double)n - 1, 0.5);
    }
    // Driver code for above functions
    public static void main(String[] args)
    {
        int n = 5, m = 100;
        System.out.print("Count is " + countOddSquares(n, m));
    }
}
// Mohit Gupta_OMG <(o_0)>
输出:
Count is 8

时间复杂度:O(1)

对于 Math.pow() 参考:
https://www.geeksforgeeks.org/java-lang-math-class-java-set-2/

有关详细信息,请参阅有关给定范围内具有奇数因子的元素数的完整文章!