PAT 1096 Consecutive Factors
这一题我一开始有点不知道怎么开始着手,我以为要找到所有的能被N分解成的因数乘积,从中找到符合条件的最值。实际上我们只需要找连乘的几个因数判断它们能被能被N所整除,如果可以就说明它是符合的因式,我们只需要找到最长的,最小的即可。
完整的代码如下:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <unordered_map>
#include <limits.h>
#include <queue>
#include <string.h>
#include <stack>
using namespace std;
int N;
vector<int> sq;
vector<int> anssq;
long long ans;
int main()
{//ios::sync_with_stdio(0),cin.tie(0),cout.tie(cin>>N;for(int i=2;i<=sqrt(N)+1;i++){//从i开始ans=i;sq.push_back(i);if(N%ans==0){if(anssq.size()<sq.size()){anssq=sq;}}for(int j=i+1;j<=sqrt(N)+1;j++){ans*=j;sq.push_back(j);//cout<<"1";if(ans>N){break;}else if(N%ans==0){//cout<<"2";if(anssq.size()<sq.size()){anssq=sq;}}} sq.clear();}if(anssq.size()==0){cout<<"1"<<endl;cout<<N;return 0;}cout<<anssq.size();cout<<endl;for(int i=0;i<anssq.size();i++){if(i!=0)cout<<"*";cout<<anssq[i];}return 0;}
注意:对于N为质数的情况来说,那么它的因数是它本身,输出它本身即可,不用输出1因为题目上说了1不包括。
本题本身难度不大,但我却没有想起来正确的思路,走了弯路