Here is what you wanted, exactly by the prescribed order.
n = -1                                 # Intentionally an incorrect value
# Ask user for the number while he/she doesn't enter a correct one
while n < 10:
    n = int(input("Enter an integer number greater or equal 10: "))
# Preparation for Sieve of Eratosthenes
flags_list = ["P"]                     # 1st value
flags_list = flags_list * (n + 1)      # (n + 1) values
flags_list[0] = "N"                    # 0 is not a prime number
flags_list[1] = "N"                    # 1 is not a prime number, too
# Executing Sieve of Eratosthenes
for i in range(2, n + 1):
    if flags_list[i] == "P":
        for j in range(2 * i, n + 1, i):
            flags_list[j] = "N"
# Creating the list of primes from the flags_list
primes = []                            # Empty list for adding primes into it
for i in range(0, n + 1):
    if flags_list[i] == "P":
        primes.append(i)
# Printing the list of primes
i = 0                                  # We will count from 0 to 9 for every printed row
print()
for prime in primes:
    if i < 10:
        print("{0:5d}".format(prime), end="")
        i = i + 1
    else:
        print()                        # New line after the last (10th) number
        i = 0
=========== The answer for your EDITED, totally other question: ===========
=========== (Please don't do it, create a new question instead.)  ===========
Replace this part of your code:
print ("Product" + "     " + "Quantity" +"     "+ "Cost")
c = 0
while c < len(product_names):
    print (product_names[c] + "    " + str(product_costs[c]) + "     "+ str(quantity[c]))
    c +=1
with this (with the original indentation, as it is important in Python):
print("{:15s} {:>15s} {:>15s}".format("Product", "Quantity", "Cost"))
for c in range(0, len(product_names)):
    print("{:15s} {:15d} {:15d}".format(product_names[c], quantity[c], product_costs[c]))
(I changed your order in the second print to name, quantity, cost - to correspond with your 1st print.)
Probably you will want change 15's to other numbers (even individually, e. g. to 12 9 6) but the triad of numbers in the first print must be the same as in the second print().
The explanation:
{:  } are placeholders for individual strings / integers listed in the print statements in the .format() method.
The number in the placeholder express the length reserved for the appropriate value.
The optional > means the output has be right aligned in its reserved space, as default alignment for text is to the left and for numbers to the right. (Yes, < means left aligned and ^ centered.)
The letter in the placeholder means s for a string, d (as "decimal") for an integer  - and may be also f (as "float") for numbers with decimal point in them - in this case it would be {:15.2f} for 2 decimal places (from reserved 15) in output.
The conversion from number to string is performed automatically for symbols d or f in the placeholder, so str(some_number) is not used here.
Addendum:
If you will have time, please copy / paste your edited version as a new question, then revert this question to its original state, as people commented / answered your original one. I will find your new question and do the same with my answer. Thanks!