Bird
Raised Fist0
DSA Cprogramming~10 mins

Check if Number is Prime in DSA C - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to check if a number is less than 2, which is not prime.

DSA C
if (num [1] 2) {
    printf("Not prime\n");
    return 0;
}
Drag options to blanks, or click blank then click option'
A>
B<
C==
D!=
Attempts:
3 left
💡 Hint
Common Mistakes
Using '==' instead of '<' to check for non-prime numbers.
Checking if num is greater than 2 here.
2fill in blank
medium

Complete the for loop to check divisors from 2 up to the square root of num.

DSA C
for (int i = 2; i [1] num / i; i++) {
    if (num % i == 0) {
        printf("Not prime\n");
        return 0;
    }
}
Drag options to blanks, or click blank then click option'
A<=
B<
C>
D>=
Attempts:
3 left
💡 Hint
Common Mistakes
Using '>' or '>=' which causes the loop to not run correctly.
Using '<' which can cause off-by-one errors in some cases.
3fill in blank
hard

Fix the error in the if condition to correctly check if num is divisible by i.

DSA C
if (num [1] i == 0) {
    printf("Not prime\n");
    return 0;
}
Drag options to blanks, or click blank then click option'
A%
B/
C*
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using '/' instead of '%' which performs division, not remainder check.
Using '*' or '-' which are incorrect operators here.
4fill in blank
hard

Fill both blanks to complete the function header and return type for checking prime.

DSA C
[1] is_prime(int num) {
    if (num < 2) {
        return [2];
    }
    // rest of code
}
Drag options to blanks, or click blank then click option'
Aint
B0
Cvoid
D1
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'void' as return type which cannot return a value.
Returning 1 for numbers less than 2 which is incorrect.
5fill in blank
hard

Fill all three blanks to complete the return statement that confirms the number is prime.

DSA C
return [1];

// Usage example:
// if (is_prime([2])) {
//     printf("%d is prime\n", [3]);
// }
Drag options to blanks, or click blank then click option'
A1
Bnum
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Returning 0 which means not prime.
Using wrong variable names in usage example.

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

  1. 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.
  2. 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.
  3. Final Answer:

    It has exactly two distinct positive divisors: 1 and itself. -> Option B
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    for(int i = 2; i < n; i++) { if(n % i == 0) return 0; } return 1; -> Option C
  4. 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

  1. 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.
  2. Step 2: Runtime behavior

    Loop never terminates (infinite loop). No printf output.
  3. Final Answer:

    Infinite loop -> Option D
  4. 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

  1. Step 1: Check the if condition inside the loop

    The condition uses n % i = 0 which is assignment, not comparison.
  2. Step 2: Understand impact of assignment in condition

    This causes a syntax error or unintended behavior. It should be n % i == 0 to compare.
  3. Final Answer:

    Using assignment operator '=' instead of comparison '==' in if condition -> Option A
  4. 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

  1. 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.
  2. Step 2: Apply loop condition using i * i <= n

    Changing the loop to run while i * i <= n reduces iterations and improves efficiency.
  3. Final Answer:

    Change loop to run till i * i <= n instead of i <= n / 2 -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard