Related Articles

# P-Smooth Numbers or P-friable Number

• Last Updated : 01 Apr, 2021

A P-smooth number or P-friable number is an integer whose largest prime factor is less than or equal to P. Given N and P, we need to write a program to check whether it is P-friable or not.
Examples:

```Input : N = 24   ,  P = 7
Output : YES
Explanation : The prime divisors of 24 are 2 and 3 only.
Hence its largest prime factor is 3 which
is less than or equal to 7, it is P-friable.

Input : N = 22   ,  P = 5
Output : NO
Explanation : The prime divisors are 11 and 2, hence 11>5,
so it is not a P-friable number. ```

The approach will be to prime factorize the number and store the maximum of all the prime factors. We first divide the number by 2 if it is divisible, then we iterate from 3 to Sqrt(n) to get the number of times a prime number divides a particular number which reduces every time by n/i and store the prime factor i if its divides N. We divide our number n (by prime factors) by its corresponding smallest prime factor till n becomes 1. And if at the end n > 2, it means its a prime number, so we store that as a prime factor as well. At the end the largest factor is compared with p to check if it is p-smooth number or not.

## C++

 `// CPP program to check if a number is``// a p-smooth number or not``#include ``#include``using` `namespace` `std;` `// function to check if number n``// is a P-smooth number or not``bool` `check(``int` `n, ``int` `p)``{``    ``int` `maximum = -1;``    ` `    ``// prime factorise it by 2``    ``while` `(!(n % 2))``    ``{``        ``// if the number is divisible by 2``        ``maximum = max(maximum, 2);``        ``n = n/2;``    ``}` `    ``// check for all the possible numbers``    ``// that can divide it``    ``for` `(``int` `i = 3; i <= ``sqrt``(n); i += 2)``    ``{``        ``// prime factorize it by i``        ``while` `(n % i == 0)``        ``{  ``            ``// stores the maximum if maximum``            ``// and i, if i divides the number``            ``maximum = max(maximum,i);``            ``n = n / i;``        ``}``    ``}` `    ``// if n at the end is a prime number,``    ``// then it a divisor itself``    ``if` `(n > 2)``        ``maximum = max(maximum, n);``    ` `    ``return` `(maximum <= p);``}` `// Driver program to test above function``int` `main()``{``    ``int` `n = 24, p = 7;``    ` `    ``if` `(check(n, p))``        ``cout << ``"yes"``;``    ``else``        ``cout << ``"no"``;``    ` `    ``return` `0;``}`

## Java

 `// Java program to check if a number is``// a p-smooth number or not` `import` `java.lang.*;` `class` `GFG{` `// function to check if number n``// is a P-smooth number or not` `static` `boolean` `check(``int` `n, ``int` `p)``{``    ``int` `maximum = -``1``;``    ` `    ``// prime factorise it by 2``    ``while` `((n % ``2``) == ``0``)``    ``{``        ``// if the number is divisible by 2``        ``maximum = Math.max(maximum, ``2``);``        ``n = n/``2``;``    ``}` `    ``// check for all the possible numbers``    ``// that can divide it``    ``for` `(``int` `i = ``3``; i <= Math.sqrt(n); i += ``2``)``    ``{``        ``// prime factorize it by i``        ``while` `(n % i == ``0``)``        ``{``            ``// stores the maximum if maximum``            ``// and i, if i divides the number``            ``maximum = Math.max(maximum,i);``            ``n = n / i;``        ``}``    ``}` `    ``// if n at the end is a prime number,``    ``// then it a divisor itself``    ``if` `(n > ``2``)``        ``maximum = Math.max(maximum, n);``    ` `    ``return` `(maximum <= p);``}` `// Driver program to test``// above function``public` `static` `void` `main(String[] args)``{``    ``int` `n = ``24``, p = ``7``;``    ` `    ``if` `(check(n, p))``        ``System.out.println(``"yes"``);``    ``else``        ``System.out.println(``"no"``);``    ` `}``}` `// This code is contributed by``// Smitha Dinesh Semwal`

## Python3

 `# Python 3 program to``# check if a number is``# a p-smooth number or not` `import` `math` `# function to check if number n``# is a P-smooth number or not``def` `check(n, p) :` `    ``maximum ``=` `-``1``    ` `    ``# prime factorise it by 2``    ``while` `(``not``(n ``%` `2``)):``    ` `        ``# if the number is divisible by 2``        ``maximum ``=` `max``(maximum, ``2``)``        ``n ``=` `int``(n``/``2``)``    `  `    ``# check for all the possible numbers``    ``# that can divide it``    ``for` `i ``in` `range``(``3``,``int``(math.sqrt(n)), ``2``):``    ` `        ``# prime factorize it by i``        ``while` `(n ``%` `i ``=``=` `0``) :``         ` `            ``# stores the maximum if maximum``            ``# and i, if i divides the number``            ``maximum ``=` `max``(maximum,i)``            ``n ``=` `int``(n ``/` `i)``        ` `    `  `    ``# if n at the end is a prime number,``    ``# then it a divisor itself``    ``if` `(n > ``2``):``        ``maximum ``=` `max``(maximum, n)``    ` `    ``return` `(maximum <``=` `p)`  `# Driver program to test above function``n ``=` `24``p ``=` `7``if` `(check(n, p)):``    ``print``( ``"yes"` `)``else``:``    ``print``( ``"no"` `)` `# This code is contributed by``# Smitha Dinesh Semwal`

## C#

 `// C# program to check if a number is``// a p-smooth number or not``using` `System;` `class` `GFG {` `    ``// function to check if number n``    ``// is a P-smooth number or not``    ` `    ``static` `bool` `check(``int` `n, ``int` `p)``    ``{``        ``int` `maximum = -1;``        ` `        ``// prime factorise it by 2``        ``while` `((n % 2) == 0)``        ``{``            ``// if the number is divisible by 2``            ``maximum = Math.Max(maximum, 2);``            ``n = n / 2;``        ``}``    ` `        ``// check for all the possible numbers``        ``// that can divide it``        ``for` `(``int` `i = 3; i <= Math.Sqrt(n); i += 2)``        ``{``            ``// prime factorize it by i``            ``while` `(n % i == 0)``            ``{``                ``// stores the maximum if maximum``                ``// and i, if i divides the number``                ``maximum = Math.Max(maximum, i);``                ``n = n / i;``            ``}``        ``}``    ` `        ``// if n at the end is a prime number,``        ``// then it a divisor itself``        ``if` `(n > 2)``            ``maximum = Math.Max(maximum, n);``        ` `        ``return` `(maximum <= p);``    ``}``    ` `    ``// Driver program to test``    ``// above function``    ``public` `static` `void` `Main()``    ``{``        ``int` `n = 24, p = 7;``        ` `        ``if` `(check(n, p))``            ``Console.Write(``"yes"``);``        ``else``            ``Console.Write(``"no"``);``        ` `    ``}``}` `// This code is contributed by vt_m.`

## PHP

 ` 2)``        ``\$maximum` `= max(``\$maximum``, ``\$n``);``    ` `    ``return` `(``\$maximum` `<= ``\$p``);``}` `// Driver Code``\$n` `= 24; ``\$p` `= 7;``    ` `if` `(check(``\$n``, ``\$p``))``    ``echo``(``"yes"``);``else``    ``echo``(``"no"``);``    ` `// This code is contributed by Ajit.``?>`

## Javascript

 ``

Output:

`yes`

Reference
http://oeis.org/wiki/P-smooth_numbers

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up