首页 > 试题广场 >

整除问题

[编程题]整除问题
  • 热度指数:14046 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。

输入描述:
两个整数n(2<=n<=1000),a(2<=a<=1000)


输出描述:
一个整数.
示例1

输入

6 10

输出

1
#include <stdio.h>
#include <math.h>
#define N 1001

void Fun(int a[], int x){
    for (int i = 2; i <= sqrt(x); i ++) {
        while (x%i==0) {
            a[i]++;
            x/=i;
        }
    }
    if (x>1) {
        a[x]++;
    }
}

int main(){
    int n, a;
    int pa[N] = {0};
    int pb[N] = {0};
    scanf("%d%d", &n, &a);
    Fun(pa, a);
    for (int i = 2; i <= n; i ++) {
        Fun(pb, i);
    }

    int min = 1000000000;
    for (int i = 2; i <= a; i ++) {
        if (pa[i]&&pb[i]/pa[i]<min) {
            min = pb[i]/pa[i];
        }
    }
    printf("%d\n", min);
    return 0;
}

数组pa记录a的质因数及其个数
数组pb记录n!的质因数及其个数
遍历数组,当pa【i】大于0且pb【i】/pa【i】最小时即为所求
发表于 2023-02-14 18:36:38 回复(0)

问题信息

难度:
1条回答 9711浏览

热门推荐

通过挑战的用户

查看代码
整除问题