Consider a long alley with a N number of doors on one side. All the doors are closed initially. You move to and fro in the alley changing the states of the doors as follows: you open a door that is already closed and you close a door that is already opened. You start at one end go on altering the state of the doors till you reach the other end and then you come back and start altering the states of the doors again.
In the first go, you alter the states of doors numbered 1, 2, 3,  , n.
In the second go, you alter the states of doors numbered 2, 4, 6
In the third go, you alter the states of doors numbered 3, 6, 9 
You continue this till the Nth go in which you alter the state of the door numbered N.
You have to find the number of open doors at the end of the procedure.
 
Example 1:
Input:
N = 2
Output:
1
Explanation:
Initially all doors are closed.
After 1st go, all doors will be opened.
After 2nd go second door will be closed.
So, Only 1st door will remain Open.
Example 2:
Input:
N = 4
Output:
2
Explanation:
Following the sequence 4 times, we can
see that only 1st and 4th doors will
remain open.
 
Your Task:
You don't need to read input or print anything. Your task is to complete the function noOfOpenDoors() which takes an Integer N as input and returns the answer.
 
Expected Time Complexity: O(√N)
Expected Auxiliary Space: O(1)
 
Constraints:
1 <= N <= 10^{12}

Source: geeksforgeeks | Difficulty: EASY
Tags: Mathematics

Starter code: #User function Template for python3



class Solution:

    def noOfOpenDoors(self, N):

        # code here

Solutions:
from math import sqrt

class Solution:

	def noOfOpenDoors(self, N):
		return int(sqrt(N))


class Solution:

	def noOfOpenDoors(self, N):
		return int(math.sqrt(N))


class Solution:

	def noOfOpenDoors(self, N):
		return int(pow(N, 1 / 2))


class Solution:

	def noOfOpenDoors(self, n):
		return int(n ** 0.5)


class Solution:

	def noOfOpenDoors(self, N):
		return int(N ** 0.5)


import numpy as np
import math
import gc

class Solution:

	def noOfOpenDoors(self, N):
		return int(math.sqrt(N))


from collections import Counter

class Solution:

	def noOfOpenDoors(self, N):
		return int(N ** 0.5)


class Solution:

	def noOfOpenDoors(self, n):
		doorsOpen = int(math.sqrt(N))
		return doorsOpen


class Solution:

	def noOfOpenDoors(self, N):
		ans = int(math.sqrt(N))
		return ans
import math


class Solution:

	def noOfOpenDoors(self, N):
		low = 1
		high = N
		n = N // 2
		if n * n == N:
			return n
		while low <= high:
			mid = (low + high) // 2
			if mid * mid == N:
				return mid
			elif mid * mid > N:
				high = mid - 1
			elif mid * mid < N:
				low = mid + 1
				req = mid
		return req


import math

class Solution:

	def noOfOpenDoors(self, N):
		dooropen = int(math.sqrt(N))
		return dooropen


class Solution:

	def noOfOpenDoors(self, N):
		return math.floor(N ** 0.5)


import math

class Solution:

	def noOfOpenDoors(self, N):
		p = math.sqrt(N)
		return math.floor(p)


import math

class Solution:

	def noOfOpenDoors(self, N):
		c = int(math.sqrt(N))
		return c


class Solution:

	def noOfOpenDoors(self, N):
		k = math.sqrt(N)
		return math.floor(k)


import math

class Solution:

	def noOfOpenDoors(self, N):
		doorsopen = int(math.sqrt(N))
		return doorsopen


import math as m

class Solution:

	def noOfOpenDoors(self, N):
		if N == 1:
			return 1
		else:
			return int(m.sqrt(N))


import math

class Solution:

	def noOfOpenDoors(self, N):
		doorsOpen = int(math.sqrt(N))
		return doorsOpen


class Solution:

	def noOfOpenDoors(self, n):
		return int(math.sqrt(n))


import math

class Solution:

	def noOfOpenDoors(self, N):
		x = int(math.sqrt(N))
		return x


import math

class Solution:

	def noOfOpenDoors(self, N):
		if N <= 2:
			return 1
		else:
			return math.floor(N ** 0.5)


from math import sqrt as s

class Solution:

	def noOfOpenDoors(self, N):
		sum = int(s(N))
		return sum


class Solution:

	def switch_state(self, n):
		if n == 0:
			return 1
		else:
			return 0

	def noOfOpenDoors(self, N):
		x = int(N ** 0.5)
		return N - (N - x)