En ce qui concerne la question du nombre de zéros de fin dans la base p de n!

Étant donné le nombre n, trouvez le nombre de zéros de fin dans la base p de n! Pour simplifier le problème, il est garanti que p est un nombre premier.
Si vous utilisez un grand entier, la solution peut expirer.
Il est facile de savoir que si un nombre peut être divisible par un autre nombre, alors le nombre qui devient un multiple de ce nombre peut également être divisible.
En utilisant cette idée, on peut en déduire que "s'il peut être divisible par p, alors le nombre de plusieurs multiples de ce nombre peut aussi être divisible", c'est-à-dire "si un 0 final peut être formé sous le système p, alors le nombre de multiples de ce nombre Cela peut également être le cas, et il peut y avoir plusieurs
codes (proportionnels au multiple) " comme suit:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
    
    
    int t,n,p,sum=0;
    cin>>t;
    for(int i=0;i<t;i++){
    
     
        sum=0;
        cin>>n>>p;
        for(int k=p;k<=n;k+=p){
    
     //与p成倍数的数肯定会被p整除,所有可以加上p的倍数。枚举n中数。
            if(k%p==0){
    
    
                int te=k;
                while(te%p==0){
    
     //如果可以被整除,就除尽,得到倍数,从而得到所有的后导0。
                    te/=p;
                    sum++;
                }
            }
        }
        cout<<sum<<endl;
    }
    return 0;
}

Le code est comme ci-dessus, bienvenue pour en discuter.

Je suppose que tu aimes

Origine blog.csdn.net/CAOSHUCAOSHU/article/details/110749271
conseillé
Classement