zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 19 A

    Description

    Given a positive integer n, find k integers (not necessary distinct) such that all these integers are strictly greater than 1, and their product is equal to n.

    Input

    The first line contains two integers n and k (2 ≤ n ≤ 100000, 1 ≤ k ≤ 20).

    Output

    If it's impossible to find the representation of n as a product of k numbers, print -1.

    Otherwise, print k integers in any order. Their product must be equal to n. If there are multiple answers, print any of them.

    Examples
    input
    100000 2
    output
    2 50000 
    input
    100000 20
    output
    -1
    input
    1024 5
    output
    2 64 2 2 2 
    题意:将数字分解为k个数相乘的形式,不行输出-1
    解法:先分解质因数,然后处理成k个数的形式,不行的话输出-1
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=300000;
     4 int n,k;
     5 int sum;
     6 int cmd(int n)
     7 {
     8     for(int i=2; i*i<=n; i++)
     9     {
    10         if(n%i==0)
    11         {
    12             return 0;
    13         }
    14     }
    15     return 1;
    16 }
    17 int main()
    18 {
    19     cin>>n>>k;
    20     if(k==1)
    21     {
    22         cout<<n<<endl;
    23         return 0;
    24     }
    25     if((n==2||cmd(n))&&k>1)
    26     {
    27         cout<<"-1"<<endl;
    28     }
    29     else
    30     {
    31         vector<int>q;
    32         for(int i=2; i<=n; i++)
    33         {
    34             while(n!=i)
    35             {
    36                 if(n%i==0)
    37                 {
    38                     q.push_back(i);
    39                     n=n/i;
    40                 }
    41                 else
    42                     break;
    43             }
    44         }
    45          q.push_back(n);
    46          if(q.size()<k)
    47          {
    48              cout<<"-1"<<endl;
    49              return 0;
    50          }
    51          for(int i=0;i<k-1;i++)
    52          {
    53              cout<<q[i]<<" ";
    54          }
    55          sum=1;
    56          for(int i=k-1;i<q.size();i++)
    57          {
    58              sum*=q[i];
    59          }
    60          cout<<sum<<endl;
    61     }
    62     return 0;
    63 }


  • 相关阅读:
    寒假补习记录_4
    寒假补习记录_3
    寒假补习记录_2
    寒假补习记录_1
    公文流转系统编程
    Javaweb编程
    转:在静态方法中访问类的实例成员
    Java字段初始化规律
    原码,反码,补码浅谈
    java第二节课课后
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/6721432.html
Copyright © 2011-2022 走看看