codeforces1089F 2000分数学

题目传送门

题意:

给你一个正整数$$ n $$,让你找到$$k$$个二元组$$ \left( a_i , b_i \right) $$,满足下列条件。

数据范围:$$ 2 \leqslant n \leqslant 10^9 $$$$ 1 \leqslant k \leqslant 10^5 $$

题解:

n = p^k时,无解。p是质数,k是正整数。

其他情况你可以找到同时满足下列条件的情况,即找到解。

 (1) n = x * y

(2)gcd(x,y)=1

(3)\frac{a}{x}+\frac{b}{y}=\frac{n-1}{n}   

感受:

学会使用markdown制作公式的方法。

代码:

#include<bits/stdc++.h>
using namespace std ;
int n ;
int main()
{
	scanf("%d" , &n) ;
	for(int x = 2 ; x * x <= n ; x ++)
	{
		if(n % x == 0 && __gcd(x , n / x) == 1)
		{
			int y = n / x ;
			for(int a = 1 ; a < x ; a ++)
			{
			   if(a * y >= n - 1)  break ;
			   if((n - 1 - a * y) % x == 0)
			   {
			   	  int b = (n - 1 - a * y) / x ;
			   	  printf("YES\n") ;
				  printf("2\n") ;
			   	  printf("%d %d\n" , a , x) ;
			   	  printf("%d %d\n" , b , y) ;
			   	  return 0 ;
			   }
			}
		}
	}
	printf("NO\n") ;
	return 0 ;
}
发布了215 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Irving0323/article/details/104087375
今日推荐