因子和阶乘

因子和阶乘

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述
给你一个正整数n,把n!=1x2x3x.....xn分解成素因子相乘的形式,并从小到大输出每个素因子的指数,但要保证最后输出的素因子个数不为0。例如825应表示为0,1,2,0,1表示分别有0,1,2,0,1个2,3,5,7,11。

输入
第一行有一个整数n(0<n<10000),表示有n组测试数据;

接下来n行每行有一个整数 m(1<m<10000)

输出
从小到大输出m分解成素因子相乘后各个素因子对应的指数
样例输入
2
5
53
样例输出
3 1 1
49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1 

代码:
#include<stdio.h>
int num[10005]={0,0};
int main(void)
{
	int T,n,i,j,k;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(i=2;i<=n;i++)
		   num[i]=1;
		for(i=2;i<=n;i++)
		{
			if(num[i]==1)
			{
				for(j=2*i;j<=n;j=j+i)
				{
					k=j;
					while(k&&k%i==0)
					{
						num[i]++;
						k=k/i;
					}
					num[j]=0;
				}
			}
		}
		for(i=2;i<=n;i++)
		{
			if(num[i]!=0)
			{
				printf("%d ",num[i]);
			}
		}
		printf("\n");
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-31 20:29:25

因子和阶乘的相关文章

算法篇——因子和阶乘

来源:<算法竞赛入门经典>例题5.4.2 题目:输入正整数n(2≤n≤100),把阶乘n!=1*2*3*...*n分解成素因子相乘的形式,从小到大输出各个素数(2.3.5...)的指数.例如,5! 表示为 3 1 1(5!=23*31*51=120),程序忽略比最大素因子更大的素数(否则末尾会有无穷多个0) 样例输入: 5 53 样例输出: 5! = 3 1 1 53! = 49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1 分析: 注意到n<=100,所以素因子也一定

words2

餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘caddy 茶罐dish 碟plate 盘saucer 小碟子rice bowl 饭碗chopsticks 筷子soup spoon 汤匙knife 餐刀cup 杯子glass 玻璃杯mug 马克杯picnic lunch 便当fruit plate 水果盘toothpick 牙签中餐:bear's

同余&amp;逆元简单总结

同余&逆元 1. 同余 1. 同余的基本概念及性质 若\(x\)%\(m=a\)即m是 x-a 的一个因子, 则称x与a关于m同余,记作:\[x \equiv a(mod \;m)\] 同余基本性质: ○1. 自反性:\(a \equiv a(mod\;m)\) ○2. 对称性:\(a \equiv b(mod\;m) \rightarrow b \equiv a(mod\;m)\) ○3. 传递性:\(a \equiv b(mod\;m),b \equiv c(mod\;m) \rightar

XDU1019 阶乘因子的个数

题意是让你求一个最小的N, 使得N!有M个0,N的阶乘中2的因子是远多于5的因子的个数, 因此我们统计出5的个数就知道其后面有几个0,对于一个数mid, mid!中5的因子的个数为mid/5 + mid/25 + mid/5^3 + ... 可以发现mid越大mid!中的5的个数越多, 因此我们可以二分答案, 代码如下: #include <cstdio> #include <cstring> #include <algorithm> #include <iost

Algorithm --&gt; 阶乘和因子

阶乘和因子 要求:输入正整数n(1<n <101), 把阶乘n!=1x2x3x...xn分解成素因子相乘的形式,从小到大输出各个素数(2,3,5,...)的指数. 例如825=3x52x11应表示成(0,1,2,0,1),表示分别有0,1,2,0,1个2,3,5,7,11.程序应忽略比最大素因子更大的素数(否则末尾会有无穷多个0). 样例输入: 5 53 样例输出: 5!=3 1 1 53!=49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1 算法代码: #include &

【题解】阶乘因子

题目描述 桐桐刚刚学习了自然数N的阶乘:阶乘(N!)被定义成从1到N的所有整数的乘积,例如5!=5×4×3×2×1=120.随着数N的增大,N!增长的非常快,5!=120,10!=3628800.桐桐想到了一种方法来列举那么大的数:不是直接列出该数,而是按照顺序列举出该数中各个质数因子出现的次数.如825可描述为(0 1 2 0 1),意思是对825分解质因数,这些质数因子中有0个2,1个3,2个5,0个7,1个11.请你编一个程序,读入N值,帮助桐桐按顺序输出N!所包含的质数因子的个数. 输入

scau 8637 阶乘与因子 筛素数

时间限制:500MS  内存限制:1000K提交次数:189 通过次数:46 题型: 编程题   语言: G++;GCC Description 游戏玩了很久总会厌的,连Lyd的蚂蚁都被放生了......(参看题目:盒子上的蚂蚁) 于是Mr.Chen 看大家很无聊,就让Lord.Suno 负责新生赛出题的事情,然后大家一起帮忙出题. Lyd 想了很久,想到一个题目,题意如下: 给出两个数,正整数n(n<10)和质数m(m<100),求满足n!=k * m^p 最大的整数p(k 为正 整数).

算法-计算阶乘n!末尾0的个数

算法逻辑转载自计算阶乘n!末尾0的个数: 问题描述    给定参数n(n为正整数),请计算n的阶乘n!末尾所含有"0"的个数.    例如,5!=120,其末尾所含有的"0"的个数为1:10!= 3628800,其末尾所含有的"0"的个数为2:20!= 2432902008176640000,其末尾所含有的"0"的个数为4. 计算公式    这里先给出其计算公式,后面给出推导过程.    令f(x)表示正整数x末尾所含有的&q

阶乘后面0的数量

题目描述: n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0. Input 一个数N(1 <= N <= 10^9) Output 输出0的数量 每个数阶乘末尾的零是由前面阶乘数字中的因子2和因子5相乘而造成的,又因为5比2多,所以只需考虑5的个数.每隔5个数,会产生一个0,如5.10.15...:每隔25个数,会多产生一个0,即两个0,如25/50/75...:每隔125个数,会多产生一个0,即三个0,如125.625...等等.即每次将除以5后