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;
}
这道题就是分解质因子,而且虽然是要分解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;
}
相关文章推荐
- Light OJ 1035 Intelligent Factorial Factorization
- LightOJ 1035 Intelligent Factorial Factorization
- LightOJ 1035 Intelligent Factorial Factorization 全排列
- LightOJ 1035 Intelligent Factorial Factorization 因子分解水题
- LightOJ 1035 Intelligent Factorial Factorization [预处理+一半的 质因子分解]【数论】
- lightoj 1035 Intelligent Factorial Factorization 因式分解
- Intelligent Factorial Factorization LightOJ - 1035
- LightOJ 1035 Intelligent Factorial Factorization
- LightOJ1035 Intelligent Factorial Factorization(算数基本定理)
- LightOJ 1035 - Intelligent Factorial Factorization (求因子)
- LightOJ 1035 Intelligent Factorial Factorization
- LightOJ - 1035 Intelligent Factorial Factorization 质因子分解
- Light OJ 1045 Digits of Factorial(求位数)
- Light OJ:1045 Digits of Factorial(数学+思维+对数)
- hoj 1035 factorial
- Light OJ 1045 - Digits of Factorial
- light oj --Digits of Factorial (一个数的位数问题以及log的公式应用)
- light oj1045 - Digits of Factorial (阶乘的位数,,运用对数)
- Write Auto-Updating Apps with .NET and the Background Intelligent Transfer Service API
- HDOJ1035