• UVA 10976 Fractions Again


    分数拆分 Fractions Again?!

    题面翻译

    输入正整数k,找到所有的正整数 x ≥ y x \ge y xy,使得 1 k = 1 x + 1 y \frac{1}{k}=\frac{1}{x}+\frac{1}{y} k1=x1+y1

    Translated by @陶文祥

    题目描述

    PDF

    输入格式

    输出格式

    样例 #1

    样例输入 #1

    2
    12
    
    • 1
    • 2

    样例输出 #1

    2
    1/2 = 1/6 + 1/3
    1/2 = 1/4 + 1/4
    8
    1/12 = 1/156 + 1/13
    1/12 = 1/84 + 1/14
    1/12 = 1/60 + 1/15
    1/12 = 1/48 + 1/16
    1/12 = 1/36 + 1/18
    1/12 = 1/30 + 1/20
    1/12 = 1/28 + 1/21
    1/12 = 1/24 + 1/24
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    分析:

    首先把题意搞懂:题目就是让我们求出两个整数x,y;使得1/x+1/y=1/n。

    咋做呢???
    枚举!!!(你们自己去一个个枚举吧,我不会枚举QWQ)

    正文
    既然我们要求出满足要求的x,y,我们不妨先看看x,y的关系:
    x>=y,那我们能不能求出x,y的范围呢???

    1/n=1/x+1/y, 1/n=1/(n/2)+1/(n/2)
    x,y最大值不能超过n/2
    又∵1/n=0+1/n,xy必须为整数
    x,y最小值不能小于n+1

    总结:n+1≤x,y≤n/2

    已经求出了范围,我们就来求求x,y~~
    我们再来看看这个方程:1/x+1/y=1/n
    左右两边同时乘上一个y得:y/x+1=y/n
    左右两边再同时乘上一个n得:y*n/x+n=y
    左右两边再~同时乘上一个x得:y*n+n*x=y*x
    移项得:y*n=y*x-n*x
    合并同类项得:y*n=x*(y-n)

    在这个方程中,x的个数只有1个,所以我们可以把x给单独提出来:(y*n)/(y-n)=x

    在上文中,我们已经求出了y的范围了,所以我们直接枚举就行啦~~~

    代码:

    #include
    
    using namespace std;
    
    int n;
    
    int x[10000],y[10000];//要求的x,y
    
    int main()
    {
    	while(scanf("%d",&n)!=EOF)
    	{
    		int k=0;//即有多少组满足要求的x,y
    		
    		memset(x,0,sizeof(x));//清空数组
    		memset(y,0,sizeof(y));
    		
    		for(int i=n*2;i>=n+1;i--)//在y的范围里枚举
    		{
    			if((n*i)%(i-n)==0)//只要x能为整数
    			{
    				k++;
    				
    				x[k]=(i*n)/(i-n);//将x存入数组x里
    				y[k]=i;//将y存入数组y里
    			}
    		}
    	
    		cout<<k<<endl;//按要求输出
    		
    		for(int i=k;i>=1;i--)//不知道为什么要从后往前输出,开始是从前往后输出的,样例是反着的QAQ
    		{
    			printf("1/%d = 1/%d + 1/%d",n,x[i],y[i]);
    		
    			cout<<endl;//换行
    		}
    	}
    	
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    结束啦~~~

  • 相关阅读:
    第 K 大的数
    自定义线程池拒绝策略
    什么是Python选择结构
    易基因技术推介|植物内生菌宏基因组研究
    【机器学习】回归的原理学习与葡萄酒数据集的最小二乘法线性回归实例
    getBean方法源码
    从零开始配置 vim(12)——主题配置
    记一次 .NET某工控自动化系统 崩溃分析
    games101 作业2
    c++ 关于引用变量你不知道的东西
  • 原文地址:https://blog.csdn.net/m0_66603329/article/details/126460759