求一个自然数的所有因子|集1

给定一个自然数n,打印它的所有不同除数。

null

 all divisors of a natural number

例如:

 Input : n = 10        Output: 1 2 5 10 Input:  n = 100 Output: 1 2 4 5 10 20 25 50 100 Input:  n = 125 Output: 1 5 25 125

请注意,此问题不同于 寻找所有主要因素 .

A. 天真的解决方案 将迭代从1到n的所有数字,检查该数字是否除以n并打印它。下面是一个同样的程序:

C++

// C++ implementation of Naive method to print all
// divisors
#include <iostream>
using namespace std;
// function to print the divisors
void printDivisors( int n)
{
for ( int i = 1; i <= n; i++)
if (n % i == 0)
cout << " " << i;
}
/* Driver program to test above function */
int main()
{
cout << "The divisors of 100 are: " ;
printDivisors(100);
return 0;
}
// this code is contributed by shivanisinghss2110


C

// C implementation of Naive method to print all
// divisors
#include<stdio.h>
// function to print the divisors
void printDivisors( int n)
{
for ( int i=1;i<=n;i++)
if (n%i==0)
printf ( "%d " ,i);
}
/* Driver program to test above function */
int main()
{
printf ( "The divisors of 100 are: " );
printDivisors(100);
return 0;
}


JAVA

// Java implementation of Naive method to print all
// divisors
class Test
{
// method to print the divisors
static void printDivisors( int n)
{
for ( int i= 1 ;i<=n;i++)
if (n%i== 0 )
System.out.print(i+ " " );
}
// Driver method
public static void main(String args[])
{
System.out.println( "The divisors of 100 are: " );
printDivisors( 100 );;
}
}


Python3

# Python implementation of Naive method
# to print all divisors
# method to print the divisors
def printDivisors(n) :
i = 1
while i < = n :
if (n % i = = 0 ) :
print (i,end = " " )
i = i + 1
# Driver method
print ( "The divisors of 100 are: " )
printDivisors( 100 )
#This code is contributed by Nikita Tiwari.


C#

// C# implementation of Naive method
// to print all divisors
using System;
class GFG {
// method to print the divisors
static void printDivisors( int n)
{
for ( int i = 1; i <= n; i++)
if (n % i == 0)
Console.Write( i + " " );
}
// Driver method
public static void Main()
{
Console.Write( "The divisors of" ,
" 100 are: " );
printDivisors(100);;
}
}
// This code is contributed by nitin mittal.


PHP

<?php
// PHP implementation of Naive
// method to print all divisors
// function to print the divisors
function printDivisors( $n )
{
for ( $i = 1; $i <= $n ; $i ++)
if ( $n % $i == 0)
echo $i , " " ;
}
// Driver Code
echo "The divisors of 100 are:" ;
printDivisors(100);
// This code is contributed by ajit
?>


Javascript

<script>
// Javascript implementation of Naive method to print all
// divisors
// function to print the divisors
function printDivisors(n)
{
for (i=1;i<=n;i++)
if (n%i==0)
document.write(i+ " " );
}
/* Driver program to test above function */
document.write( "The divisors of 100 are:" + "<br>" );
printDivisors(100);
// This code is contributed by Mayank Tyagi
</script>


输出:

The divisors of 100 are: 1 2 4 5 10 20 25 50 100

时间复杂性: O(n) 辅助空间: O(1)

我们能改进上述解决方案吗? 如果我们仔细观察,所有的除数都成对出现。例如,如果n=100,那么各种除数对是:(1100),(2,50),(4,25),(5,20),(10,10) 利用这一事实,我们可以大大加快我们的程序。 然而,我们必须小心,如果有两个相等的除数,比如(10,10)。在这种情况下,我们只打印其中一个。

以下是相同的实现:

C++

// A Better (than Naive) Solution to find all divisors
#include <iostream>
#include <math.h>
using namespace std;
// Function to print the divisors
void printDivisors( int n)
{
// Note that this loop runs till square root
for ( int i=1; i<= sqrt (n); i++)
{
if (n%i == 0)
{
// If divisors are equal, print only one
if (n/i == i)
cout << " " << i;
else // Otherwise print both
cout << " " << i << " " << n/i;
}
}
}
/* Driver program to test above function */
int main()
{
cout << "The divisors of 100 are: " ;
printDivisors(100);
return 0;
}
// this code is contributed by shivanisinghss2110


C

// A Better (than Naive) Solution to find all divisors
#include <stdio.h>
#include <math.h>
// Function to print the divisors
void printDivisors( int n)
{
// Note that this loop runs till square root
for ( int i=1; i<= sqrt (n); i++)
{
if (n%i == 0)
{
// If divisors are equal, print only one
if (n/i == i)
printf ( "%d " , i);
else // Otherwise print both
printf ( "%d %d " , i, n/i);
}
}
}
/* Driver program to test above function */
int main()
{
printf ( "The divisors of 100 are: " );
printDivisors(100);
return 0;
}


JAVA

// A Better (than Naive) Solution to find all divisors
class Test
{
// method to print the divisors
static void printDivisors( int n)
{
// Note that this loop runs till square root
for ( int i= 1 ; i<=Math.sqrt(n); i++)
{
if (n%i== 0 )
{
// If divisors are equal, print only one
if (n/i == i)
System.out.print( " " + i);
else // Otherwise print both
System.out.print(i+ " " + n/i + " " );
}
}
}
// Driver method
public static void main(String args[])
{
System.out.println( "The divisors of 100 are: " );
printDivisors( 100 );;
}
}


Python3

# A Better (than Naive) Solution to find all divisors
import math
# method to print the divisors
def printDivisors(n) :
# Note that this loop runs till square root
i = 1
while i < = math.sqrt(n):
if (n % i = = 0 ) :
# If divisors are equal, print only one
if (n / i = = i) :
print (i,end = " " )
else :
# Otherwise print both
print (i , int (n / i), end = " " )
i = i + 1
# Driver method
print ( "The divisors of 100 are: " )
printDivisors( 100 )
#This code is contributed by Nikita Tiwari.


C#

// A Better (than Naive) Solution to
// find all divisors
using System;
class GFG {
// method to print the divisors
static void printDivisors( int n)
{
// Note that this loop runs
// till square root
for ( int i = 1; i <= Math.Sqrt(n);
i++)
{
if (n % i == 0)
{
// If divisors are equal,
// print only one
if (n / i == i)
Console.Write(i + " " );
// Otherwise print both
else
Console.Write(i + " "
+ n / i + " " );
}
}
}
// Driver method
public static void Main()
{
Console.Write( "The divisors of "
+ "100 are: " );
printDivisors(100);
}
}
// This code is contributed by Smitha


PHP

<?php
// A Better (than Naive) Solution
// to find all divisors
// Function to print the divisors
function printDivisors( $n )
{
// Note that this loop
// runs till square root
for ( $i = 1; $i <= sqrt( $n ); $i ++)
{
if ( $n % $i == 0)
{
// If divisors are equal,
// print only one
if ( $n / $i == $i )
echo $i , " " ;
// Otherwise print both
else
echo $i , " " , $n / $i , " " ;
}
}
}
// Driver Code
echo "The divisors of 100 are: " ;
printDivisors(100);
// This code is contributed by anuj_67.
?>


Javascript

<script>
// A Better (than Naive) Solution to find all divisors
// Function to print the divisors
function printDivisors(n)
{
// Note that this loop runs till square root
for (let i = 1; i <= Math.sqrt(n); i++)
{
if (n % i == 0)
{
// If divisors are equal, print only one
if (parseInt(n / i, 10) == i)
document.write(i);
// Otherwise print both
else
document.write(i + " " +
parseInt(n / i, 10) + " " );
}
}
}
// Driver code
document.write( "The divisors of 100 are: </br>" );
printDivisors(100);
// This code is contributed by divyesh072019
</script>


输出:

The divisors of 100 are: 1 100 2 50 4 25 5 20 10

时间复杂度:O(sqrt(n)) 辅助空间:O(1)

但是解决方案中还有一个小问题,你能猜到吗? 对输出不是我们使用蛮力技术得到的排序方式。请参考下面的O(sqrt(n))时间解决方案,它按排序顺序打印除数。 求自然数|集2的所有除数 本文由 阿什图什·库马尔 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享