vijosP1279 Leave-绿光

来源:互联网 发布:mysql 删除数据库命令 编辑:程序博客网 时间:2024/04/28 18:44

题目描述:

将边长为正整数a,b的长方形划分成若干边长均为正整数,每个正方形的边均平行于矩形的相应边,试求这些正方形边之和的最小值MIN。

(如果这个长方形可以分成N个正方形,其中每个边长为Ai,那么MIN=A1+A2+^^^+AN

注意,数组A中的元素可能相等)

分析:要求正方形边长之和的最小值,切割下来的正方形应当尽可能大。又由于只要累加一个边长,最后一个切下来的正方形边长一定为gcd(a,b),那么ans=a+b-gcd(a,b) (最后一个正方形边长只算一次,a+b是两次)

注:数论的题能用int64 或者 long long的尽量用,避免内存问题。

#include<iostream>using namespace std;long long a,b,r,ans,a1,b1;int main(){     int i;     for(int i=1;i<=10;i++)     {             cin>>a1>>b1;             r=a1%b1;             a=b1;b=r;             while(r!=0)             {                        r=a%b;                        a=b;                        b=r;                        }             ans=a;              cout<<a1+b1-ans<<endl;     }     return 0;}             


0 0
原创粉丝点击