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
  • 相关阅读:
    剑指OFFER之包含min函数的栈
    剑指OFFER之二叉树的镜像
    关于【最长递增子序列(LIS)】
    题目1113:二叉树
    剑指OFFER之字符串的排列
    题目1120:全排列
    题目1460:Oil Deposit
    题目1459:Prime ring problem
    剑指OFFER之二叉树中和为某一值的路径
    python 线程、进程
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11396368.html
Copyright © 2011-2022 走看看