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. ```

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.

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

My Personal Notes arrow_drop_up