1294C - Product of Three Numbers

链接:

https://codeforces.com/problemset/problem/1294/C

题意:

对于一个数字n,找到三个不相同且大于等于2的a,b,c,使a×b×c=n

解:

把两个乘数先合一,变成T×F=n

为了复杂度,现在2-sqrt(n)找因数T,然后对每一个T,得到对应的F,判断F是否有因数,然后比较三个数字看是否重复,输出结果

PS:我只找了F的第一个因数,因为假设

n=64,T=2,F=32,F的第一个因数2,重复了,但是不继续找,找下一个T=4,F=16,F的第一个因数2;2,4,8成立

n=315,T=3,F=105,F的第一个因数,3,重复,下一个T=5,F=63,第一个因数3;3,5,21成立

所以即使不想后找,F在有其他合适因数的时候,也会被其他T刷出来

我还担心是不是超时,还好没超QWQ

实际代码:

#include<iostream>
#include<bits/stdc++.h> 
using namespace std;
int ss(int a)
{
	int sq=sqrt(a);
	if(a<=1) return 0;
	if(a==2||a==3) return 0;
	for(int i=2;i<=sq;i++) if(a%i==0) return i;
	return 0;
}
int main()
{
	int n;
	cin>>n;
	for(int f=1;f<=n;f++)
	{
		int a;
		cin>>a;
		bool book=0;
		int sq=sqrt(a);
		for(int i=2;i<=sq;i++)
		{
			if(a%i==0)
			{
				int d=a/i;
				int temp;
				if((temp=ss(d))==0) continue;
				else
				{
					int tt=d/temp;
					if(temp!=tt&&temp!=i&&i!=tt)
					{
						cout<<"YES"<<endl;
						cout<<temp<<" "<<i<<" "<<d/temp<<endl;
						book=1;
						break;
					}
				}
			}
		}
		if(!book) cout<<"NO"<<endl;
	}
}

限制:

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值