您的位置:首页 > 其它

Light OJ 1035 - Intelligent Factorial Factorization

2014-04-29 11:04 405 查看
思路:

这道题就是分解质因子,而且虽然是要分解N!的质因子,但是N比较小。

#include <stdio.h>
#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <map>
#include <utility>

using namespace std;
const int maxn = 105;
int prime[maxn];
int isprime[maxn];
map<int, int>mp;
map<int, int>::iterator it;
void getprime(){//筛选出素数
memset(isprime, 0, sizeof(isprime));
int id = 1;
for(int i = 2;i < maxn;i++){
if(!isprime[i])
prime[id++] = i;
for(int j = i+i;j < maxn ;j += i){
if(!isprime[j])
isprime[j] = 1;
}
}
// for(int i = 1;i < 100;i++)
// printf("%d ",prime[i]);
}
void primeFactor(int n){//质因子分解
for(int i = 1;prime[i]*prime[i] <= n;i++){
int p = 0;
while(n%prime[i] == 0){
p++;
n /= prime[i];
}
if(p)
mp[prime[i]] += p;
}
if(n != 1)
mp
++;
}
int main(){
getprime();
int t,n;
scanf("%d",&t);
for(int cas = 1;cas <= t;cas++){
scanf("%d",&n);
mp.clear();
for(int i = 1;i <= n;i++)
primeFactor(i);
printf("Case %d: %d =",cas,n);
for (it = mp.begin(); it != mp.end(); it++) {
if(it != mp.begin())
printf(" *");
printf(" %d (%d)",it->first,it->second);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: