Number Theory I 📚

Agenda

  1. Divisors
  2. Primes
  3. Prime Factorization
  4. Sieve of Eratosthenes
  5. Applications
  6. Practice Problems

1. Divisors ⚙️

Time Complexity: O(sqrt(N))

vector<int> get_divisors(int n) {
    vector<int> divisors;
    for (int i = 1; i * i <= n; ++i) {
        if (n % i == 0) {
            divisors.push_back(i);
            if (i != n / i) divisors.push_back(n / i);
        }
    }
    return divisors;
}

int main() {
    int n;
    cin >> n;
    auto divisors = get_divisors(n);
    for (auto d: divisors) cout << d << " ";
}

2. Primes 🔑

Time Complexity: O(sqrt(N))

bool isPrime(int n) {
    for (int i = 2; i * i <= n; ++i) {
        if (n % i == 0) return false;
    }
    return n > 1;
}

int main() {
    int n;
    cin >> n;
    cout << (isPrime(n) ? "Prime" : "Not a Prime");
}

3. Prime Factorization 🧩