数论———算数基本定律

问题描述:20!的二进制表示中从最低位数起,最长有多少个连续的0。

题目分析:如果我们先算出20!转换二进制表示,在数最长的连续0,那么这肯定是低效的。

我们可以通过数论中的算术基本定理解决;

算术基本定理:整数a可以素因子分解:a=p1r1  p2r2  …pnrn

举个荔枝:99 099=32 ×7×112×13

那么20!能分解出多少个2,2的个数就是本题答案

#include<stdio.h>
int main(){
    int a=1,cnt=0;

    while(a<=20){
        int b=a;
        while(b!=0&&b%2==0){
            cnt++;
            b=b/2;
        }
        a++;
    }
    printf("%d",cnt);
}

 顺便安利一波十进制数转n进制代码

    String str="";
        for(int i=100;i!=0;i/=2){    //100的二进制
            str=(i%2)+str;
        }

 

posted @ 2017-10-20 22:36  bear_ge  阅读(349)  评论(0编辑  收藏  举报