hdu 1124 OR toj 1065 数论

题目大意:求解n的阶乘末尾0的个数。

分析:

产生0的原因有:(1):2 * 5 (2):乘数末尾有0,如10, 200

不过(2)可以归到(1)中,10 = 2 * 5, 200 = 2 * 2 * 2 * 5 * 5

容易想到将n!分解成质数的乘积以后,只有2 * 5这种组合可以产生末尾的0,且2的个数一定比5的个数多,因为2^n总是比5^n早出现。

所以问题转换为求解n!中有多少个5出现。代码如下:

 1 #include <iostream>
 2 using namespace std;
 3
 4 int solve( int n )
 5 {
 6     int ans = 0, f = 5;
 7     while ( f <= n )
 8     {
 9         ans += n / f;
10         f = f * 5;
11     }
12     return ans;
13 }
14
15 int main ()
16 {
17     int t;
18     cin >> t;
19     while ( t-- )
20     {
21         int n;
22         cin >> n;
23         cout << solve(n) << endl;
24     }
25     return 0;
26 }
时间: 2024-11-22 22:47:35

hdu 1124 OR toj 1065 数论的相关文章

HDU 1124 Factorial(简单数论)

Factorial Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4237    Accepted Submission(s): 2805 Problem Description The most important part of a GSM network is so called Base Transceiver Station

hdu 1124 数论

题意:求n!中末尾连续0的个数  其实就是2*5的个数 30! 中有5 10 15 20 25 30  是5的倍数有6个   6=30/5; 6/5=1; 这个1 为25 5  10 15 20  25  30 35 40 45 50 55 60  65 70 75 80  85 90 95 100      100/5=20; 25                     50                    75                     100       20/5=4

hdu 4944 FSF’s game(数论)

题目链接:hdu 4944 FSF's game 题目大意:给定N,可以用不大于N的长a和宽b,组成N?(N?1)2种不同的矩形,对于每个矩形a?b要计算它的值,K为矩形a,b可以拆分成若干个K?K的正方形.∑a?bgcd(a/k,b/k),输出所有矩形值的和. 解题思路:假设有边a和b,那么k肯定即使a的因子也是b的因子.定义f(n)为矩形最长边等于n的情况下所有矩形值的和.那么f(n)=val(1?n)+val(2?n)+?+val(n?n),枚举n的因子作为k,现在假设有因子k,使得n=k

hdu 4910 Problem about GCD(数论)

题目连接:hdu 4910 Problem about GCD 题目大意:给定M,判断所有小于M并且和M互质的数的积取模M的值. 解题思路:有个数论的结论,若为偶数,M=M/2. 可以写成M=pk,即只有一种质因子时,答案为M-1,否则为1.特殊情况为4的倍数,不包括4. 首先用1e6以内的素数去试除,如果都不可以为p,那么对大于1e6的情况判断一下是否为素数,是素数也可以(k=1),否则开方计算,因为M最大为1e18,不可能包含3个大于1e6的质因子. #include <cstdio> #

hdu 1124

题意:求N!中末尾0的个数 其实就是5的个数 因为2*5=10 肯定n中2的个数比5的个数多#include<iostream> using namespace std; int main() { int n; int t,d; int sum; scanf("%d",&t); while(t--) { sum=0; scanf("%d",&n); sum=n/5;n=sum; while(n/5!=0) { sum+=n/5; n=n/

hdu 1299 Diophantus of Alexandria (数论)

Diophantus of Alexandria Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2269    Accepted Submission(s): 851 Problem Description Diophantus of Alexandria was an egypt mathematician living in Ale

HDU 1098 [Ignatius&#39;s puzzle] 数论

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098 题目大意:f(x)=5x^13+13x^5+kax. 给出k,求a使得对任意x,满足f(x)是65的倍数 关键思想:f(x)要是65的倍数,需满足f(x)既是5的倍数又是13的倍数. 1.f(x)为5的倍数需满足  f(x) % 5 = 0 5x^13+13x^5+kax % 5 = 0  x(13x^4+ka) % 5 = 0  对任意x成立    13+ka % 5 = 0  //费马小定

HDU 1124 Factorial (数论)

http://acm.hdu.edu.cn/showproblem.php? pid=1124 題目好長好長,好可怕,看完腎都萎了,以後肯定活不長.我可不能死在這種小事上,小灰灰我勵志死在少女的超短裙下~~~哈哈,所以我就猥瑣的叫 旁邊的小師妹幫我翻譯了,我是不是非常禽獸,嘻嘻~~~ 題目大意呢,就是給一個數,要你求出它的階乘的得到的結果後面有幾個0. 解析: 一看就是簡單數論啦.跟數因子有關.最小素因子并且相乘能得到10的(就是後面有0的)就是2*5啦.因為一個數的階乘2的因子明顯比5的因子要

hdu 1124 Factorial 数论,就是求一个数的阶乘的结果末尾有多少0.

Factorial Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2990    Accepted Submission(s): 1921 Problem Description The most important part of a GSM network is so called Base Transceiver Station