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

📅  最后修改于: 2021-04-29 16:47:59             🧑  作者: Mango

给定一个范围[ nm ],找到在给定范围内( 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

C++
// C++ program to count number of odd squares
// in given range [n, m]
#include 
using namespace std;
 
int countOddSquares(int n, int m)
{
   return (int)pow(m,0.5) - (int)pow(n-1,0.5);
}
 
// Driver code
int main()
{
    int n = 5, m = 100;
    cout << "Count is " << countOddSquares(n, m);
    return 0;
}


Java
// 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)>


Python3
# Python program to count number of odd squares
# in given range [n, m]
 
def countOddSquares(n, m):
    return int(m**0.5) - int((n-1)**0.5)
 
# Driver code
n = 5
m = 100
print("Count is", countOddSquares(n, m))
 
# Mohit Gupta_OMG <0_o>


C#
// C# program to count number of odd
// squares in given range [n, m]
using System;
 
class GFG {
     
    // Function to count odd squares
    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
    public static void Main ()
    {
        int n = 5, m = 100;
        Console.Write("Count is " + countOddSquares(n, m));
    }
}
 
// This code is contributed by Nitin Mittal.


PHP


Javascript


输出 :

Count is 8