JNOJ 三个分数

1102: 三个分数

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 41   Solved: 16
[ Submit][ Status][ Web Board]

Description

给出一个整数n(1<=n<=10^5),

请判断能否找到三个不相等的正整数x、y、z,

使得等式 2/n = 1/x + 1/y + 1/z 成立。


Input

第一行有一个整数t,表示数据组数。

接下来t行每行一个整数表示n。


Output

对于每组数据中的n,

如果可以找到满足条件的三个整数,输出"Yes"

(比如当n=3,可以找到x=2,y=7,z=42,使得2/3=1/2+1/7+1/42)

否则输出"No"(均不带引号)


Sample Input

1
3

Sample Output

Yes

HINT

Source


其实大于2都有解

#include<cstdio>
#include<iostream>
#include<algorithm>

using namespace std;

int dfs(int n){
	int son=2;
	int mon=n;
	int yuefen=1;
	int i=0;
	for(i=2;son*i<=mon;i++){}
	//cout<<"-1/"<<i<<endl;
	son=son*i-mon;
	mon=mon*i;
	for(yuefen=2;yuefen<=son;yuefen++){
		if(son%yuefen==0&&mon%yuefen==0){
			son/=yuefen;
			mon/=yuefen;
		}
	}
	if(1==son)return 0;
	//cout<<son<<"/"<<mon<<endl;
	for(i=mon/son+1;son*i<=mon;i++){}
	son=son*i-mon;
	mon=mon*i;
	//cout<<"-1/"<<i<<endl;
	for(yuefen=2;yuefen<=son;yuefen++){
		if(son%yuefen==0&&mon%yuefen==0){
			son/=yuefen;
			mon/=yuefen;
		}
	}
	//cout<<son<<"/"<<mon<<endl;
	if(1==son)return 1;
	else return 0;
}

int main(){
	int t, n;
	cin>>t;
	while(t--){
		cin>>n;
		if(1==n||2==n){
			cout<<"No"<<endl;
			continue;
		}
		if(dfs(n))cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值