HDU 6441 费马大定理+勾股数

#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(a) (a).begin(), (a).end()
#define fillchar(a, x) memset(a, x, sizeof(a))
#define huan printf("\n")
#define debug(a,b) cout<<a<<" "<<b<<" "<<endl
#define ffread(a) fastIO::read(a)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn=1e6+10,inf=0x3f3f3f3f;
int main()
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        ll n, a, b, c;
        scanf("%lld%lld", &n, &a);
        if (n == 1)
        {
            printf("%lld %lld\n", 1, 1+a);
        }
        else if (n == 2)
        {
            if (a % 2 == 1)
            {
                ll tmp = (a-1)/2;
                b = 2*tmp*tmp+2*tmp;
                c = b+1;
                printf("%lld %lld\n", b, c);
            }
            else
            {
                ll tmp = a/2 - 1;
                b = tmp*tmp + 2*tmp;
                c = b + 2;
                printf("%lld %lld\n", b, c);
            }
        }
        else
            printf("-1 -1 \n");
    }
    return 0;
}勾股数https://wenku.baidu.com/view/8282f1b669eae009591bec85.html

原文地址:https://www.cnblogs.com/stranger-/p/9807591.html

时间: 2024-11-05 12:24:42

HDU 6441 费马大定理+勾股数的相关文章

2015浙工大校赛-Problem C: 三角—— 费马大定理+勾股数

题目 有一个直角三角形三边为 A,B,C 三个整数.已知 C 为最长边长,求一组B,C,使得B和C最接近. (题目链接) 分析 打表找规律. 或者直接一点的枚举 $C-B$ 的值.(既然枚举 B 不现实,枚举差值是一种很好的思路啊,学习了 %%% 博客) 或者使用费马大定理(的一小部分), 当 $A$ 为奇数时($A > 1$),存在 $C-B = 1$ 的整数解使得 $A^2 + B^2 = C^2$: 当 $A$ 为偶数时 ($A > 2$),存在 $C-B = 2$ 的整数解使得 $A^

关于勾股数的规律

有可能是初中写的最后一篇了,中考啊~~以前跟一些人提到过,互质的勾股数a,b,c(即a²+b²=c²)都满足一个规律(其实互质满足了,那么不互质也一定满足):当a为奇数时:b=(a²-1)/2c=(a²+1)/2当a为偶数时:b=a²/4-1c=a²/4+1那么,这个条件是否充分呢(就是说当a,b,c满足以上规律时,这三个数是否为互质的勾股数)?显而易见,如果不要求互质的话,这是绝对满足的,证明如下:当a为奇数时:a²+b²=a²+[(a²-1)/2]²=a²+(a²-1)²/4=a²+(a^4

勾股数---Python

传说存在唯一一组勾股数,三个数的和是1000,那么它的积是多少呢? def judge(a,b,c):    if a+b<=c or b+c<=a or a+c<=b:        return 0    if a*a+b*b==c*c or b*b+c*c==a*a or a*a+c*c==b*b:        return 1    result=0for i in range(1,1000):    for j in range(1,1000-i):        k=100

Uva 106-Fermat vs. Pythagoras(勾股数性质)

题目链接:点击打开链接 题意:给出N,x^2+y^2=z^2 小于等于N的解(互素)的个数以及小于N的个数除掉所有解(包括不互素)已经用掉的数. 度娘给出勾股数的定义:只考虑互素的解,给出勾股数公式 a=2*m*n ,b=m*m-n*n ,c=m*m+n*n;  枚举m,n ,复杂度 O(log(N)^2) #include <algorithm> #include <iostream> #include <cstring> #include <cstdlib&g

勾股数

程序地址:http://www.cheemoedu.com/exercise/16 问题描述: 所谓勾股数,一般是指能够构成直角三角形3条边的3个正整数(a,b,c).即a2+b2=c2,a,b,cΣN求1000以内的勾股数. 我的思路:使用for循环列出所有的数,连续判断是否满足a2+b2=c2关系,满足的就是勾股数,但是要注意,三个数中任意一个都不可以为0,且重复的如3,4,5和4,3,5要去除,只留下其中一个: 我的代码: for i in range(1,1000):     for j

UVA106 - Fermat vs. Pythagoras(素勾股数)

题目链接 题目大意:给你一个数n,勾股数三元组(x,y,z)的定义:满足x < y < z, x^2 + y^2 = z^2.现在问这里里面有多少个三元组是素勾股数即满足x,y, z两两互质.并且判断剩下的1-n的数有多少是没有出现在勾股数三元组中. 解题思路:先找出所有的素勾股数(x, y, z) ,那么便可以通过(kx, ky, kz)得到不是素勾股数的勾股数.接着要换种方式构造素勾股数,公式:x = m^2 - n^2; y = 2?m?n; z = m^2 + n^2:其中若 m 和

迅雷笔试题_素勾股数的个数

题目: 勾股数,是由三个正整数组成的数组:能符合勾股定理 a*a + b*b = c*c ,(a, b, c) 的正整数解.如果 (a, b, c) 是勾股数,它们的正整数倍数,也是勾股数.如果 (a, b, c) 互质,它们就称为素勾股数.给定正整数N, 计算出小于或等于N的素勾股数个数. 样例输入: 10 样例输入: 1 思路: 产生素勾股数的方式: 设m > n .m 和n 均是正整数, a=m2-n2 b=2mn c= m2+n2 若m 和n 是互质,而且m 和n 其中有一个是偶数,计算

HDU 6441 - Find Integer - [费马大定理][2018CCPC网络选拔赛第4题]

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6441 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Descriptionpeople in USSS love math very much, and there is a famous math problem .give you two integers n,a,

【2018CCPC网络赛 1004】Find Integer(勾股数+费马大定理)

Problem Description people in USSS love math very much, and there is a famous math problem . give you two integers n,a,you are required to find 2 integers b,c such that an+bn=cn. Input one line contains one integer T;(1≤T≤1000000) next T lines contai