您的位置:首页 > 其它

LightOJ 1035 Intelligent Factorial Factorization [预处理+一半的 质因子分解]【数论】

2016-06-29 16:32 435 查看
题目链接:LightOJ 1035 Intelligent Factorial Factorization

Intelligent Factorial Factorization

Time Limit:500MS Memory Limit:32768KB 64bit IO Format:%lld & %llu

Submit

Status

Description

Given an integer N, you have to prime factorize N! (factorial N).

Input

Input starts with an integer T (≤ 125), denoting the number of test cases.

Each case contains an integer N (2 ≤ N ≤ 100).

Output

For each case, print the case number and the factorization of the factorial in the following format as given in samples.

Case x: N = p1 (power of p1) * p2 (power of p2) * …

Here x is the case number, p1, p2 … are primes in ascending order.

Sample Input

3

2

3

6

Sample Output

Case 1: 2 = 2 (1)

Case 2: 3 = 2 (1) * 3 (1)

Case 3: 6 = 2 (4) * 3 (2) * 5 (1)

题目大意 就是把N! 质因子分解一下

题解: 因为数据量很小 所以预处理一下所有N! 的质因子个数即可

这种办法 应该可以做到n<=1000

n<10000的时候用容器存一下 而且时间在大一丢丢 应该还是能做的

因为数据量太小 所有算法都是最最最最最暴力的

附本题代码

—————————-

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <set>

using namespace std;

#define LL unsigned long long int

int Is_or[500];
void Prime()
{
int n=200;
int k=0;
memset(Is_or,1,sizeof(Is_or));
Is_or[0]=Is_or[1]=0;
for(int i=2; i<n; i++)
{
if(Is_or[i])
{
for(int j=i+i; j<n; j+=i)
{
Is_or[j]=0;
}
}
}
return ;
}

int has[105][105];

void init()
{
int num;
memset(has,0,sizeof(has));
for(int i=2;i<=100;i++)
{
for(int j=2;j<=i;j++)
{
num=i;
if(num%j==0&&Is_or[j])
while(num%j==0)
has[i][j]++,num/=j;
}
}

for(int i=1;i<=100;i++)
{
for(int j=1;j<=100;j++)
{
has[i][j]+=has[i-1][j];
}
}

return ;
}

int main()
{
Prime();
init();
int t,tt=0,num;
LL p,l;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d",&n);
printf("Case %d: %d = ",++tt,n);

printf("%d (%d)",2,has
[2]);
for(int i=3;i<=n;i++)
{
if(has
[i])
printf(" * %d (%d)",i,has
[i]);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: