zoukankan      html  css  js  c++  java
  • nefu 118 n!后面有多少个0 算数基本定理,素数分解

    n!后面有多少个0

    Time Limit 1000ms

    Memory Limit 65536K

    description

    从输入中读取一个数n,求出n!

    中末尾0的个数。

    input

    输入有若干行。第一行上有一个整数m。指明接下来的数字的个数。然后是m行,每一行包括一个确定的正整数n,1<=n<=1000000000。

    output

    对输入行中的每个数据n,输出一行,其内容是n!中末尾0的个数。

    sample_input

    3
    3
    100
    1024
    

    sample_output

    0
    24
    253
    

    考查的素数基本定理的性质,素数基本定理:每一个大于1的正整数n都能被唯一地写成素数的乘积,在乘积中的素因子依照非降序排列。n=(p1^a1)*(p2^a2)*.....*(pk^ak).

    n!

    的素因子分解中的素数p的幂为: [n/p]+[n/p^2]+[n/p^3]+.........

    再看这个题,说n!

    后面有几个0。显然我们不能算出n。。所以我们得找特征。

    对于随意一个正整数。若对其进行因式分解,那么其末尾的0必定能够分解成2*5,所以每个0必定和一个5相应,但同一时候还须要有2才行。而对于n!,在因式分解中,因子2的个数要比因子5的个数多,所以假设存在一个因子5,那么它必定相应着n!末尾的一个0,那么本题就变为求n!的分解中因子5的个数,那么上面的公式就派的上用场了。

    代码例如以下:

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    int main()
    {
    	int i,j,s,n;
    	int cas,ans,t;
    	scanf("%d",&cas);
    	while(cas--)
    	{
    		scanf("%d",&n);
    		s=5;ans=0;t=n/5;
    		while(t!=0)
    		{
    			ans+=t;
    			s*=5;
    			t=n/s;
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    


  • 相关阅读:
    获取cookie
    EF数据迁移(当模型改变时更新数据库)
    EF有外键的查询
    EF查询
    前台主页面给子页面赋值(回调)
    jquery取元素值
    chart画图
    IIS 7.0 的 ASP.NET 应用程序生命周期概述(转载)
    查询服务器登录个数
    gridview中判断隐藏还是现实
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6751536.html
Copyright © 2011-2022 走看看