美文网首页
分解素因数——2. 整除问题

分解素因数——2. 整除问题

作者: 辘轳鹿鹿 | 来源:发表于2020-06-29 16:33 被阅读0次

整除问题

题目描述

给定n,a求最大的k,使n!可以被ak整除但不能被a(k+1)整除。

输入描述:

两个整数n(2<=n<=1000),a(2<=a<=1000)

输出描述:

一个整数.

示例1

输入

6 10

输出

1

解题心得:

  • 首先应注意,n!和a的k次可能数值非常巨大,而不能被int保存。
  • 思路:思考若整数a能整除整数b则它们之间有什么关系? image.png

    若a存在素因数px则b也比存在该素因数,且该素因数在b中对应的幂指数比不小于a中的幂指数

  • 算法: image.png

    我们要确定最大的非负整数k,使a中任一素因数的幂指数的k倍依旧小于或等于该素因数在x中对应的幂指数。要求得该k,我们只需一次测试a中每一个素因数,确定b中该素因数对应得幂指数是a中幂指数得几倍,这样所有倍数中最小的那个即为我们要求的k。

  • 对n!分解素因数的方法(p是小于等于n的所有素数)
    • 有n/p个整数可以向n!提供一个p因子
    • 有n/(pp)个整数可以向n!提供两个p因子,但是它们在之前的步骤中已经提供了一个。所以这里每个再贡献一个。一共贡献n/(pp)个。
    • 若n/(p^k)变为0,表示没有整数能提供更多的p因子,关于p的分解结束。
  • 答案错误时,一定要认真检查代码逻辑,可能有些地方实际实现的和想要实现的不一样。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>



int main(){

   int m[1001]={0},n,i,j,size=0,msize[1000],a;
   for(i=2;i<=1000;i++){
        if(m[i]==0){
                msize[size]=i;
                size++;

            if(i>=100)
                continue;
            for(j=i;j*i<=1000;j++){
                m[j*i]=1;
            }
        }
   }


   while(scanf("%d %d",&n,&a)!=EOF){

    int nsize[1000]={0},asize[1000]={0},k,kn;
    for(i=0;i<size;i++){
        if(n/msize[i]==0){
            break;
        }
        k=n/msize[i];
        kn=msize[i];
        while(k){
            nsize[i]+=k;
            kn=kn*msize[i];
            k=n/kn;

        }
        //printf("%d %d\n",msize[i],nsize[i]);
    }



    for(i=0;i<size;i++){
        if(a<=1){
            break;
        }
        while(a%msize[i]==0){
            asize[i]++;
            a=a/msize[i];

        }
    }
    k=1000;
    for(j=0;j<i;j++){
        if(asize[j]){
            kn=nsize[j]/asize[j];

            if(kn<k){
                k=kn;

            }
        }


    }
    printf("%d\n",k);
   }
    return 0;

}


相关文章

  • 分解素因数——2. 整除问题

    整除问题 题目描述 给定n,a求最大的k,使n!可以被ak整除但不能被a(k+1)整除。 输入描述: 两个整数n(...

  • 《分解质因数》教学反思

    分解质因数是在因数和倍数以及能被2、5、3整除的数的特征的基础上进行教学的。分解质因数是求最大公约数、最小公...

  • 分解质因数教学反思

    分解质因数是在学生学习了因数和倍数、质数与合数以及能被2、5、3整除的数的特征的基础上进行教学的。 在教学分解质因...

  • 2018-01-16 求阶乘尾部的0的个数

    解析: 标准(素因数)分解式求正整数的标准分解式的过程叫做正整数的素因数分解。任意整数n>1都可以唯一表示为:n=...

  • 分解素因数——1. 质因数的个数

    质因数的个数 题目描述 求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=22235,共有...

  • 近世代数理论基础4:整除·欧式除法

    整除·欧式除法 整除 定义:设,若使,则称b整除a,或a可被b整除,记作,此时b为a的因数,a为b的倍数,若上述q...

  • 三升四数学(4)

    四,质数,合数 1.复习:因数的概念,找60的因数 2.正整数按因数的个数分类: ①一个因数 ②两个因数:质数(素...

  • 马立平:小学数学教材中的严重问题

    引子: 近几天考虑,为什么之前叫被乘数、乘数、积,现在叫因数、因数、积,这里的因数和整除的因数有什么区别与联系? ...

  • 分解质因数和应用

    分解质因数是什么分解质因数就是将一个合数分解成多个质数相乘的形式,这就是分解质因数。我举个最简单的例子,比如说4它...

  • 2020-06-13

    今天我要分享的是分解因数与分解因式。 因数是什么呢?因数是如:10=5*2,5、2就是10的因数。10是5和2的倍...

网友评论

      本文标题:分解素因数——2. 整除问题

      本文链接:https://www.haomeiwen.com/subject/gznofktx.html