博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ny509 因子和阶乘
阅读量:6153 次
发布时间:2019-06-21

本文共 1004 字,大约阅读时间需要 3 分钟。

因子和阶乘

时间限制:
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分解成素因子相乘后各个素因子对应的指数
样例输入
2553
样例输出
3 1 149 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1

讲解:大概意思就是看n的阶乘中是用多少个素数的多少次方算的 例如825=3*52*11所以是一个3,两个5

,一个11,然后再统计824;以此类推

代码如下:

#include<stdio.h>

#include<math.h>
#include<string.h>
int a[10000];
int main()
{
 void fun();
 int m,n,i,j,t,b[10010];
 fun();
  scanf("%d",&t);
  while(t--)
  {
   memset(b,0,sizeof(b));
   scanf("%d",&n);
   for(i=n;i>=2;i--)
   {
    for(j=0;a[j]<=i;j++)
    {  m=i;
     while(m%a[j]==0)
     {
      b[a[j]]++;
      m=m/a[j]; 
     }
    }
   }
    for(i=0;a[i]<=n;i++)
     if(b[a[i]])
      printf("%d ",b[a[i]]);
     printf("\n");
  }
  return 0;
}
void fun()
{
 int i,m,k,c=1,j;
 a[0]=2;
 for(i=3;i<=10000;i++)
 { k=0;
  m=i;
  for(j=2;j<=sqrt(m);j++)
   if(m%j==0)
   {
    k=1;
    break;
   }
   if(k!=1)
    a[c++]=i;  
 }
// for(i=0;i<=10000;i++)
//  printf("%d ",a[i]);
}

转载于:https://www.cnblogs.com/lovychen/p/3188705.html

你可能感兴趣的文章
一个屌丝程序猿的人生(六十六)
查看>>
Java 编码 UTF-8
查看>>
SpringMVC实战(注解)
查看>>
关于静态属性和静态函数
查看>>
进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
查看>>
spring+jotm+ibatis+mysql实现JTA分布式事务
查看>>
MyBatis启动:MapperStatement创建
查看>>
调查问卷相关
查看>>
eclipse启动无响应,老是加载不了revert resources,或停留在Loading workbench状态
查看>>
1. Git-2.12.0-64-bit .exe下载
查看>>
怎样关闭“粘滞键”?
查看>>
[转]React 教程
查看>>
拓扑排序介绍
查看>>
eclipse打开工作空间(workspace)没有任务反应
查看>>
使用Sybmol模块来构建神经网络
查看>>
字符串去分割符号
查看>>
WPF中,多key值绑定问题,一个key绑定一个界面上的对象
查看>>
UML类图简明教程
查看>>
java反编译工具(Java Decompiler)
查看>>
Android开发之自定义对话框
查看>>