Untitled

 avatar
unknown
plain_text
19 days ago
1.6 kB
2
Indexable
#include <bits/stdc++.h>
using namespace std;
vector<bool> mark(101, true);
vector<int> primes;
void sieve() 
{
    mark[0] = mark[1] = false;
    for (int i = 2; i * i <= 100; ++i) 
    {
        if (mark[i]) 
        {
            for (int j = i * i; j <= 100; j += i) 
            {
                mark[j] = false;
            }
        }
    }
    for (int i = 2; i <= 100; ++i) 
    {
        if (mark[i]) 
        {
            primes.push_back(i);
        }
    }
}
vector<int> factors(int n) 
{
    vector<int> factor_counts(primes.size(), 0);
    for (int i = 0; i < primes.size(); ++i) 
    {
        int prime = primes[i];
        int count = 0;
        for (long long p = prime; p <= n; p *= prime) 
        {
            count += n / p;
        }
        factor_counts[i] = count;
    }
    return factor_counts;
}

void print(int n, const vector<int>& factor_counts) 
{
    cout << setw(3) << n << "! =";
    int count = 0;
    for (int i = 0; i < factor_counts.size(); ++i)
     {
        if (factor_counts[i] == 0) break;
        if (count > 0 && count % 15 == 0) 
        {
            cout << endl;
            cout << "      ";
        }
        cout << setw(3) << factor_counts[i];
        count++;

        if (count % 15 != 0 && i<factor_counts.size()-1) 
        {
            //cout << " ";
        }
    }
    cout << endl;
}

int main() 
{
    sieve();
    int n;

    while (true) 
    {
        cin >> n;
        if (n == 0) break;
        vector<int> factor_counts = factors(n);
        print(n, factor_counts);
    }

    return 0;
}
Leave a Comment