A prime number is a natural number greater than 1 that has no positive divisors other than 1 and itself.
Click to reveal answer
intermediate
Why do we only check divisors up to the square root of a number when testing for primality?
Because if a number n is divisible by a number greater than its square root, it must also be divisible by a number smaller than the square root. So checking up to the square root is enough.
Click to reveal answer
beginner
What is the simplest method to check if a number is prime?
Try dividing the number by all integers from 2 up to the square root of the number. If none divide evenly, the number is prime.
Click to reveal answer
beginner
What should you return if the number is less than 2 in a prime check function?
Return false because numbers less than 2 are not prime by definition.
Click to reveal answer
beginner
In C, which data type is best to use for the number when checking primality?
Use an integer type like int or long depending on the range of numbers you want to check.
Click to reveal answer
Which number is NOT a prime number?
A2
B3
C4
D5
✗ Incorrect
4 is not prime because it can be divided evenly by 2.
What is the smallest prime number?
A0
B2
C1
D3
✗ Incorrect
2 is the smallest prime number.
When checking if 29 is prime, up to which number should you check for divisors?
A6
B14
C29
D5
✗ Incorrect
Check divisors up to the square root of 29, which is approximately 5.38, so check up to 5.
If a number is divisible by 1 and itself only, it is:
APrime
BComposite
CEven
DOdd
✗ Incorrect
Prime numbers have only 1 and themselves as divisors.
Which of these is an efficient way to check primality?
ACheck divisibility up to sqrt(n)
BCheck divisibility up to n/2
CCheck divisibility up to n-1
DCheck divisibility only by 2
✗ Incorrect
Checking up to the square root of n is efficient and sufficient.
Explain how to check if a number is prime using a simple algorithm.
Think about dividing the number by smaller numbers.
You got /4 concepts.
Why is it enough to check divisors only up to the square root of the number when testing primality?
Consider how multiplication pairs work.
You got /3 concepts.
Practice
(1/5)
1. What does it mean for a number to be prime?
easy
A. It is divisible by 2.
B. It has exactly two distinct positive divisors: 1 and itself.
C. It is an even number.
D. It has more than two divisors.
Solution
Step 1: Understand the definition of prime number
A prime number is a number greater than 1 that has no divisors other than 1 and itself.
Step 2: Compare options with definition
Only It has exactly two distinct positive divisors: 1 and itself. correctly states this definition. Options B, C, and D are incorrect because they describe properties that do not define prime numbers.
Final Answer:
It has exactly two distinct positive divisors: 1 and itself. -> Option B
Quick Check:
Prime number = two divisors [OK]
Hint: Prime numbers have only 1 and itself as divisors [OK]
Common Mistakes:
Thinking all even numbers are prime
Confusing prime with composite numbers
Including 1 as a prime number
2. Which of the following C code snippets correctly checks if a number n is prime?
easy
A. for(int i = 1; i < n; i++) { if(n % i == 0) return 0; } return 1;
B. for(int i = 2; i <= n; i++) { if(n % i == 0) return 0; } return 1;
C. for(int i = 2; i < n; i++) { if(n % i == 0) return 0; } return 1;
D. for(int i = 2; i < n/2; i++) { if(n % i == 0) return 1; } return 0;
Solution
Step 1: Analyze loop range for divisor checking
To check if n is prime, we test divisors from 2 up to n-1. for(int i = 2; i < n; i++) { if(n % i == 0) return 0; } return 1; uses i < n, which is correct.
Step 2: Check return values and conditions
for(int i = 2; i < n; i++) { if(n % i == 0) return 0; } return 1; returns 0 if a divisor is found, else returns 1 meaning prime. Other options have incorrect loop ranges or return values.
Final Answer:
for(int i = 2; i < n; i++) { if(n % i == 0) return 0; } return 1; -> Option C
Quick Check:
Loop from 2 to n-1 and return 0 if divisible [OK]
Hint: Check divisors from 2 to n-1 for prime [OK]
Common Mistakes:
Checking divisibility by 1
Looping up to n instead of n-1
Returning wrong values on divisor found
3. What is the output of the following C code when n = 11?
int isPrime(int n) {
if (n <= 1) return 0;
for (int i = 2; i < i * i <= n; i++) {
if (n % i == 0) return 0;
}
return 1;
}
printf("%d", isPrime(n));
medium
A. 1
B. Compilation error
C. 0
D. Infinite loop
Solution
Step 1: Analyze the for loop condition
In C, relational operators (<, <=) associate left-to-right with same precedence. i < i * i <= n parses as (i < (i * i)) <= n. For i ≥ 2, i < i*i is true (1), so 1 <= n is true. Condition always true.
Step 2: Runtime behavior
Loop never terminates (infinite loop). No printf output.
Final Answer:
Infinite loop -> Option D
Quick Check:
(i < i*i) <= n always true [OK]
Hint: C relational ops left-to-right: (i < i*i) <= n always true [OK]
Common Mistakes:
Thinking chained comparisons cause compile error
Assuming Python-like chained comparison
Believing loop stops at sqrt(n)
4. Find the error in this C function to check if n is prime:
int isPrime(int n) {
if (n <= 1) return 0;
for (int i = 2; i <= n / 2; i++) {
if (n % i = 0) return 0;
}
return 1;
}
medium
A. Using assignment operator '=' instead of comparison '==' in if condition
B. Loop should run till i < n, not n / 2
C. Missing return statement at the end
D. No error, code is correct
Solution
Step 1: Check the if condition inside the loop
The condition uses n % i = 0 which is assignment, not comparison.
Step 2: Understand impact of assignment in condition
This causes a syntax error or unintended behavior. It should be n % i == 0 to compare.
Final Answer:
Using assignment operator '=' instead of comparison '==' in if condition -> Option A
Quick Check:
Use '==' for comparison, not '=' [OK]
Hint: Use '==' to compare, '=' assigns value [OK]
Common Mistakes:
Confusing '=' and '==' in conditions
Looping till n/2 is actually correct optimization
Ignoring compiler error messages
5. You want to optimize prime checking for large n. Which change improves efficiency the most?
int isPrime(int n) {
if (n <= 1) return 0;
for (int i = 2; i <= n / 2; i++) {
if (n % i == 0) return 0;
}
return 1;
}
hard
A. Change loop to run till i * i <= n instead of i <= n / 2
B. Check divisibility only by even numbers
C. Start loop from 1 instead of 2
D. Remove the initial check for n <= 1
Solution
Step 1: Understand loop optimization for prime checking
Checking divisors up to n/2 is inefficient. We only need to check up to the square root of n.
Step 2: Apply loop condition using i * i <= n
Changing the loop to run while i * i <= n reduces iterations and improves efficiency.
Final Answer:
Change loop to run till i * i <= n instead of i <= n / 2 -> Option A
Quick Check:
Check divisors up to sqrt(n) for efficiency [OK]
Hint: Check divisors only up to square root of n [OK]
Common Mistakes:
Checking even numbers only misses odd divisors
Starting loop from 1 wastes time
Removing base case causes wrong results
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.