解题报告 之 SOJ2666 分解 n!
来源:互联网 发布:苏联解体中国反应 知乎 编辑:程序博客网 时间:2024/06/08 05:00
解题报告 之 SOJ2666 分解 n!
Description
给你一个数 n (1 < n <= 1000000) ,求 n! (n的阶乘)的质因数分解形式,质因数分解形式为n=p1^m1*p2^m2*p3^m3……* 这里 p1 < p2 < p3 < …… 为质数* 如果 mi = 1, 则 ^ mi 就不需要输出 Input
输入是多case的,每行一个数n,1 < n <= 1000000,当n等于0时输入结束Output
每个n输出一行,为它的质因数分解形式Sample Input
670 Sample Output
6=2^4*3^2*57=2^4*3^2*5*7 Author
windy7926778
题目大意:略。
分析:感觉是裸的素数运算性质。素数有一个性质是,n!的质因子分解中,质因子p的个数为PN(n,p)=[n/p]+[n/p^2]+[n/p^3]+…… 直到[n/p^q]==0,其中[ ]表示向下取整。所以这个题我们要分解n!。可以先用素数筛打表,然后逐个逐个分解看看有多少个,最后再输出结果即可。注意输出的格式。
上代码:#include<iostream>#include<cmath>#include<cstring>using namespace std;int isprime[1010000];long long prime[1010000];int pnum[1010000];int cnt;void getP(){for(int i = 1; i < 1010000; i++)isprime[i] = 1;for(int i = 2; i < 1010000; i++){if(!isprime[i])continue;prime[cnt++] = i;for(int j = 2 * i; j < 1010000; j += i)isprime[j] = 0;}}long long get( long long n ,long long key){int tem = key;long long num = 0;while(n >= key){num += n / key;key *= tem;}return num;}int main(){long long n;getP();while(cin >> n &&n){if(n == 1){cout << "1=1" << endl;continue;}memset( pnum, 0, sizeof pnum );for(int i = 0; prime[i] <= n&&prime[i]; i++){pnum[i] = get( n, prime[i] );}cout << n << "=";bool fst = 0;for(int i = 0; prime[i] <= n&&prime[i]; i++){if(!fst)fst = true;elsecout << "*";if(pnum[i])cout << prime[i];if(pnum[i]>=2)cout << "^" << pnum[i];}cout << endl;}return 0;}
向梅姐致敬!
Description
给你一个数 n (1 < n <= 1000000) ,求 n! (n的阶乘)的质因数分解形式,质因数分解形式为n=p1^m1*p2^m2*p3^m3……* 这里 p1 < p2 < p3 < …… 为质数* 如果 mi = 1, 则 ^ mi 就不需要输出Input
输入是多case的,每行一个数n,1 < n <= 1000000,当n等于0时输入结束Output
每个n输出一行,为它的质因数分解形式Sample Input
670Sample Output
6=2^4*3^2*57=2^4*3^2*5*7Author
windy7926778
题目大意:略。
分析:感觉是裸的素数运算性质。素数有一个性质是,n!的质因子分解中,质因子p的个数为PN(n,p)=[n/p]+[n/p^2]+[n/p^3]+…… 直到[n/p^q]==0,其中[ ]表示向下取整。所以这个题我们要分解n!。可以先用素数筛打表,然后逐个逐个分解看看有多少个,最后再输出结果即可。注意输出的格式。
上代码:
#include<iostream>#include<cmath>#include<cstring>using namespace std;int isprime[1010000];long long prime[1010000];int pnum[1010000];int cnt;void getP(){for(int i = 1; i < 1010000; i++)isprime[i] = 1;for(int i = 2; i < 1010000; i++){if(!isprime[i])continue;prime[cnt++] = i;for(int j = 2 * i; j < 1010000; j += i)isprime[j] = 0;}}long long get( long long n ,long long key){int tem = key;long long num = 0;while(n >= key){num += n / key;key *= tem;}return num;}int main(){long long n;getP();while(cin >> n &&n){if(n == 1){cout << "1=1" << endl;continue;}memset( pnum, 0, sizeof pnum );for(int i = 0; prime[i] <= n&&prime[i]; i++){pnum[i] = get( n, prime[i] );}cout << n << "=";bool fst = 0;for(int i = 0; prime[i] <= n&&prime[i]; i++){if(!fst)fst = true;elsecout << "*";if(pnum[i])cout << prime[i];if(pnum[i]>=2)cout << "^" << pnum[i];}cout << endl;}return 0;}
向梅姐致敬!
1 0
- 解题报告 之 SOJ2666 分解 n!
- 解题报告 之 SOJ2668 C(n,k)
- N!解题报告
- HDU1042 N! 解题报告
- Hdu 1042 N!解题报告
- [ACM] hdoj1042 N! 解题报告
- N-Queens [Leetcode解题报告]
- N皇后问题解题报告
- 球盒问题之二:n分解成m正数和解题代码
- 解题报告之DisjointSet
- 解题报告之 非诚勿扰
- N - TOYS解题报告(来自网络)
- uva 10985 Rings'n'Ropes 解题报告
- Leetcode Pow(x, n) 解题报告
- hdu 2553 N皇后问题 解题报告
- LeetCode-Pow(x, n)-解题报告
- codevs1295 N皇后问题 解题报告
- [leetcdoe] 51. N-Queens 解题报告.
- 解题报告 之 SOJ2668 C(n,k)
- struts2小结
- 实时技术
- hdu5217Brackets【线段树,二分】
- Cheating sheet for vim
- 解题报告 之 SOJ2666 分解 n!
- 初识splay tree (一)
- 2015年的春天——我在北京
- 谈一下使用akamai media on demand no secure 遇到的问题和解决经历
- 基于Redis实现分布式消息队列(1)
- YII CRUD [ 2.0 版本 ] 与教程地址
- avahi-daemon
- 关于android中drawable文件夹下各类xml样式文件的使用详解
- Dynamics AX 配置 SANA,录入SANA基础数据