Codeforces Round #615 (Div. 3). C - Product of Three Numbers
Posted stelayuri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #615 (Div. 3). C - Product of Three Numbers相关的知识,希望对你有一定的参考价值。
题面:https://codeforces.com/contest/1294/problem/C
题目大意:
给定一个n,问是否存在3个互不相同的,大于等于2的整数,满足a*b*c=n
解题思路:
可以把abc其中任意两个看作一个整体,例如a*b=d,那么可以发现d*c=n
所以d和c是n的因子
易得a和b也是n的因子
所以可以往n的因子这方面去考虑
题目就变成,是否存在3个不互相同的且大于等于2的n的因子,使得这三个因子的乘积为n
循环i=2~sqrt(n),找出所有n的因子i和对应的n/i,储存起来
又可以想到,如果abc其中有任意一个数大于sqrt(n),那么剩下两个数的乘积必定小于sqrt(n)
所以只需要枚举2~sqrt(n)中的因子,取出两个当作a和b,判断此时的c是否存在即可
1 /* 2 Written By StelaYuri 3 On 2020/01/22 4 */ 5 #include<bits/stdc++.h> 6 using namespace std; 7 typedef long long ll; 8 vector<ll> fac;//存2~sqrt(n)内的因子 9 set<ll> mfac;//存除了1和自身的所有的因子 10 void solve(){ 11 fac.clear(); 12 mfac.clear(); 13 ll n,i,j,d,d2,cnt; 14 cin>>n; 15 d=sqrt(n); 16 for(i=2;i<=d;i++) 17 if(n%i==0){ 18 fac.push_back(i); 19 mfac.insert(i); 20 mfac.insert(n/i); 21 } 22 cnt=fac.size(); 23 for(i=0;i<cnt;i++) 24 for(j=i+1;j<cnt;j++){ 25 d=fac[i]*fac[j];//枚举两个数乘积 26 d2=n/d; 27 if(n%d==0&&d2!=fac[i]&&d2!=fac[j]&&mfac.find(d2)!=mfac.end()){//如果乘积d是n的因子,且此时三个数互不相同,且n/d也是n的因子,说明找到了答案 28 cout<<"YES "<<fac[i]<<‘ ‘<<fac[j]<<‘ ‘<<n/d<<‘ ‘; 29 return; 30 } 31 } 32 cout<<"NO "; 33 } 34 int main(){ 35 ios::sync_with_stdio(0); 36 cin.tie(0);cout.tie(0); 37 int T;cin>>T; 38 while(T--) 39 solve(); 40 41 return 0; 42 }
另,还可以根据a,b,c都为n的因子这个定理,在找到第一个因子a后,把b,c看作是n/a的因子
那么就可以只找两个因子就结束循环直接进行判断
1 /* 2 Written By StelaYuri 3 On 2020/01/23 4 */ 5 #include<bits/stdc++.h> 6 using namespace std; 7 void solve(){ 8 int n,i,cnt=0,d,ar[3]; 9 cin>>n; 10 for(i=2;i*i<=n;i++) 11 if(n%i==0){ 12 ar[cnt++]=i; 13 n/=i; 14 if(cnt==2) 15 break; 16 } 17 if(cnt==2){ 18 ar[2]=n; 19 sort(ar,ar+3); 20 if(ar[0]!=ar[1]&&ar[1]!=ar[2]){ 21 cout<<"YES "<<ar[0]<<‘ ‘<<ar[1]<<‘ ‘<<ar[2]<<‘ ‘; 22 return; 23 } 24 } 25 cout<<"NO "; 26 } 27 int main(){ 28 ios::sync_with_stdio(0); 29 cin.tie(0);cout.tie(0); 30 int T;cin>>T; 31 while(T--) 32 solve(); 33 34 return 0; 35 }
以上是关于Codeforces Round #615 (Div. 3). C - Product of Three Numbers的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #615(Div.3)解题报告
Codeforces Round #615 (Div. 3)
Codeforces Round #615 (Div. 3)
Codeforces Round #615 (Div. 3)