当前位置: 代码迷 >> 综合 >> 2018-2019 ICPC, NEERC, Northern Eurasia Finals F Fractions (数论)
  详细解决方案

2018-2019 ICPC, NEERC, Northern Eurasia Finals F Fractions (数论)

热度:75   发布时间:2023-11-15 13:37:09.0

题目链接:http://codeforces.com/contest/1089

#include<bits/stdc++.h>
using namespace std;#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define ll long long#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root l,r,rt
#define mst(a,b) memset((a),(b),sizeof(a))#define pii pair<ll,ll>
#define mk(x,y) make_pair(x,y)const int  maxn =1e5+5;
const int mod=1e9+7;
const int ub=1e6;
ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
/*
题目大意:要构造一个分数之和,
其分母必须是给定数的因子,分子任意,
那么对于一个因子i,必有另一个因子n/i,
且这两个配对的话会映射到分子的式子里面,
解这题需要事先知道个定理,
邮票问题,数论知识,a,b如果互质,且小于n,
肯定能组成0到n之内的数,且系数可以是正数。这样这题就简单了,直接筛因子然后判定即可。时间复杂度:O(sqrt(n)*sqrt(n))最坏。。。。
不大会算,反正能过。*/int n;
int x1,y1,x2,y2;int main()
{scanf("%d",&n);x1=-1;for(int i=2;i*i<=n;i++)if(n%i==0){if(gcd(i,n/i)==1){int tp1=min(i,n/i),tp2=max(i,n/i),ub=(n-1)/tp2;for(int j=1;j<=ub;j++) if((n-1-tp2*j)%tp1==0){int tmp=(n-1-tp2*j)/tp1;x2=j,y2=tp2;x1=tmp,y1=tp1;break;}break;}}if(x1==-1) puts("NO");else{puts("YES");puts("2");cout<<x1<<" "<<y2<<endl;cout<<x2<<" "<<y1<<endl;}return 0;
}