• + 0 comments

    Python 3 solution with Sieve of Eratosthenes:

    def get_prime(n):
        if n < 2:
            return [];
        nums = [True]*(n+1)
        nums[0], nums[1] = False, False
        p = 2
        while(p*p<=n):
            if nums[p]:
                for i in range(p*p, n+1, p):
                    nums[i] = False
            p+=1
        primes = [num for num, prime in enumerate(nums) if prime]
        return primes
            
    primes = get_prime(10001)
    
    def waiter(number, q):
        # Write your code here
        answers = []
        A = number
        
        for i in range(q):
            if not A:
                break
            prime = primes[i]
            B=[]
            new_A=[]
            for plate in reversed(A):
                if plate%prime==0:
                    B.append(plate)
                else:
                    new_A.append(plate)
            answers.extend(reversed(B))
            A=new_A
        answers.extend(reversed(A))
        return answers