SGU 117 Counting

n个数,求其M次幂能够被k整除的数的个数。(n,k,m<=10000)


快速幂求解即可。或者可以将k和那n个数都分解质因数。如果某个数的所有质因数的个数都不小于k的相应的质因数个数,则该数可被k整除

#include<cstdio>
#include<cmath>
using namespace std;
#define LL __int64
int pow(int a,int b,int k)
{
    int ans=1;
    while(b)
    {
        if(b&1) ans=ans*a%k;
        if(!ans) return ans;
        a=a*a%k;
        b>>=1;
    }
    return ans;
}
int main()
{
    int i,n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    int ans=0;
    for(int i=1;i<=n;++i)
    {
        int a;
        scanf("%d",&a);
        if(!pow(a,m,k)) ++ans;
    }
    printf("%d\n",ans);
    return 0;
}


你可能感兴趣的:(SGU 117 Counting)