zoukankan      html  css  js  c++  java
  • HDU6441Find Integer费马大定理+奇偶数列法则

    感觉这样看的比较清楚。

    题意:

    给出n和a,判断能否求出a^n+b^n=c^n中b和c的值,若可以输出b和c,否则则输出-1 -1。

    思路:

    数据给的比较大,但是题目很简单,套两个公式:费马打定理和奇偶数列法则分类讨论即可。

    以下是对这两个法则的介绍:

    费马大定理:

    当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没有正整数解。

      相关题目:UVALive - 6862  Triples

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int m,n;
     5     while(~scanf("%d %d",&m,&n))
     6     {
     7         int sum=0;
     8         for(int x=0; x<=m; x++) //当j==2时 题目给出条件x=<y=<z
     9         {
    10             for(int y=x; y<=m; y++)
    11             {
    12                 for(int z=y; z<=m; z++)
    13                 {
    14                     if(x*x+y*y==z*z)
    15                         sum++;
    16                 }
    17             }
    18         }
    19         sum=sum+(n-2)*(m+1);//当2<j<=n时,有n-2种情况。
    20         //即x=0时,y=z,0=<y<=m,有m+1种情况
    21         printf("%d\n",sum);
    22     }
    23     return 0;
    24 }
    View Code
     

    奇偶数列法则:

    定理:      是直角三角形的三个整数边长,则必有如下a值的奇数列、偶数列关系成立; 
     

    奇数列法则: 
       若a表为2n+1型奇数(n=1、2、3……), 则a为奇数列平方整数解的关系是: 
       a=2n+1 


    偶数列法则: 
      若a表为2n型偶数(n=2、3、4……), 则a为偶数列平方整数解的关系是: 
       a= 2n 

     推荐一个好用的可以在markdown插入数学公式的网站,今天也是第一次用。

    http://latex.codecogs.com/eqneditor/editor.php

     1 #include<stdio.h>
     2 typedef long long ll;
     3 
     4 int main()
     5 {
     6     int t;
     7     ll n,a;
     8     scanf("%d",&t);
     9     while(t--)
    10     {
    11         scanf("%lld %lld",&n,&a);
    12         if(n>2||n==0)//n>2可以根据费马大定理可得,n==0等式是无法成立的,但题目给出了需要判断不然WA
    13             printf("-1 -1\n");
    14         else if(n==2)//想到勾股定理,根据奇偶数列法则可得
    15         {
    16             //分a是奇数还是偶数讨论
    17             if(a%2==1)
    18             {
    19                 ll x=(a-1)/2;
    20                 ll b=x*x+(x+1)*(x+1)-1;
    21                 ll c=x*x+(x+1)*(x+1);
    22                 printf("%lld %lld\n",b,c);
    23             }
    24             else if(a%2==0)
    25             {
    26                 ll x=a/2;
    27                 ll b=x*x-1;
    28                 ll c=x*x+1;
    29                 printf("%lld %lld\n",b,c);
    30             }
    31         }
    32         else if(n==1)//因为可以随便输出一个解,所以假设b=1,a+1=c
    33             printf("1 %lld\n",a+1);
    34     }
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
    【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
    【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
    March 11th, 2018 Week 11th Sunday
    March 10th, 2018 Week 10th Saturday
    March 09th, 2018 Week 10th Friday
    March 08th, 2018 Week 10th Thursday
    March 07th, 2018 Week 10th Wednesday
    ubantu之Git使用
    AMS分析 -- 启动过程
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11396368.html
Copyright © 2011-2022 走看看