Rezolvare completă PbInfo #746 Multiplu1

Se consideră două numere naturale nenule N şi K. Numim K-şir un şir de numere naturale cu K termeni.

Cerința

Determinaţi numărul format din ultimele 4 cifre ale numărului de K-şiruri distincte cu proprietatea că fiecare dintre ele are cel mai mic multiplu comun al termenilor egal cu N.

Date de intrare

Fișierul de intrare multiplu1.in conține pe prima linie cele două numere N şi K separate printr-un singur spaţiu.

Date de ieșire

Fișierul de ieșire multiplu1.out va conține pe prima linie un singur număr natural reprezentând rezultatul cerut.

Restricții și precizări

  • 0 < N ≤ 1 000 000 000
  • 0 < K ≤ 1 000 000 000

Exemplu

multiplu1.in

5 2

multiplu1.out

3

Explicație

Cele trei 2-şiruri cu cel mai mic multiplu comun al termenilor egal cu 5 sunt : (1,5), (5,1) şi (5,5).

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Multiplu1:

#include<cstdio>

const int N=30;
const int M=10000;

int n,k,nr,d[N];

void desc(int n)
{
    for(int i=2;i*i<=n;++i)
        if(n%i==0)
        {
            d[++nr]=0;
            while(n%i==0)
            {
                n/=i;
                ++d[nr];
            }
        }
    if(n!=1)
        d[++nr]=1;
}

int pow(int a,int n)
{
    int p=1;
    while(n)
    {
        if(n&1)
            p=p*a%M;
        a=(a*a)%M;
        n>>=1;
    }
    return p;
}

int calcul()
{
    int p=1,t;
    desc(n);
    for(int i=1;i<=nr;++i)
    {
        t=pow(1+d[i],k)-pow(d[i],k);
        if(t<0)
            t+=M;
        p=p*t%M;
    }
    return p;
}

int main()
{
    freopen("multiplu1.in","r",stdin);
    freopen("multiplu1.out","w",stdout);
    scanf("%d%d",&n,&k);
    printf("%d
",calcul());
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #746 Multiplu1

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #746 Multiplu1 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!