codeforces] ECR19 A. k-Factorization [数论]
来源:互联网 发布:淘宝旺铺专业版要钱吗 编辑:程序博客网 时间:2024/06/07 17:00
链接:Codeforces Educational Codeforces Round 19 A. k-Factorization
题意
给你两个正整数 n, k
。
判断是否存在k
个数相乘,使其乘积等于n
。
如果不存在,输出-1
。
如果存在,再以任何你喜欢的顺序输出这k
个数。
(当然他们之间应以空格分隔)
分析
题目不难,应该有很多种方法解答这个问题。
我直接说一下我的思路:
既然要得到k
个数相乘,那么这k
个数肯定是尽量越小越好。
(比如n
能被6
整除,那尽量把6
拆成2
和3
。)
这里面有点贪心的感觉。因为如果剩下的n
越大,那满足k
个数的概率也就越大。
所以这道题我直接从2
开始循环判断是否能够做n
的因子。
如果可以就直接存下来,n
除去当前因子,然后继续判断这个因子。
如果不行,那再判断他的后一个(新因子 = 因子+1
)
依次这样判断,直到找不到因子了或者已经够个数了为止。
(当已经找到k-1
个因子时,就可以直接把剩下的n
当做最后一个数,而不用继续做下去了。)
代码
#include <cstdio>#include <vector>using namespace std;int n, k;int main(){ while( ~scanf( "%d %d", &n, &k ) ){ vector< int > ans; //用来存这k个数 int j = 0; //保存当前因子个数 for( int i = 2; i <= n; i++ ){ if( n % i == 0 ){ //若能整除则存下来 if( ++j == k ){ //已经存够k-1个数,则直接存入剩下的n ans.push_back( n ); break; } n /= i; ans.push_back( i ); i--; } } if( j != k ) puts( "-1" ); else{ int sz = ans.size(); printf( "%d", ans[ 0 ] ); for( int i = 1; i < sz; i++ ){ printf( " %d", ans[ i ] ); } puts( "" ); } } return 0;}
小结
毕竟签到题,比较得简单,如果大家有更简单的方法可以留言或者Q我。
0 0
- codeforces] ECR19 A. k-Factorization [数论]
- codeforces A. k-Factorization
- CodeForces 797A k-Factorization
- Codeforces 797A k-Factorization
- Codeforces 797A k-Factorization
- Educational Codeforces Round 19 A. k-Factorization
- 【CodeForces 797A】k-Factorization(分解质因数)
- A. k-Factorization
- A. k-Factorization
- Codeforces 858A. k-rounding 数论
- codeforces 484A Bits 数论
- Codeforces 303A 构造+数论
- Codeforces gym 101343 A 数论
- k-Factorization CF
- codeforces A. k-String 题解
- Codeforces - 219A - k-String
- CodeForces 219A k-String
- codeforces 861A k-rounding
- MyBatis使用大全(4)------XML映射文件配置
- Java中synchronize 与lock实现多线程同步
- poj 2104 K-th Number (划分树模板题)
- 25 岁的 Linux 已经无处不在,它是如何毁了微软统治世界的计划?
- html 轮播图
- codeforces] ECR19 A. k-Factorization [数论]
- 使用commons的Configuration读取XML
- linux运维-虚拟机的创建,快照
- 使用mybatis自带工具,自动生成表对应domain、mapper.xml以及dao
- 第六章 二叉树的性质
- oracle 启动多个实例
- Spring+Mybatis实现动态SQL查询
- [LeetCode]240. Search a 2D Matrix II
- 查看Linux内核版本的命令