zoukankan      html  css  js  c++  java
  • UVALive

    这里写图片描述

    题意:求有多少个三元组(x,y,z)满足 0<=x<=y<=z<=m 且 x^j + y^j = z^j. 其中输入m,和n, 且
    2≤j≤n。

    费马大定理:当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没有正整数解。
    因此ans计算的只是当题目中的j=2时有解的情况数量
    而x,y,z是指m的值,每个m都要配一个不同的n,因此(m+1)表示从0到m个数,xyz都会取到,并且从小到大,n从2到n,共n-1个数
    配对种数(m+1)*(n-1)个,这就只考虑了y,z两个数,因为x固定是0,当x不是0的时候,就是考虑了3个数
    考虑3个数的情况,只有j=2有解,用循环来暴力找有几个满足条件,然后,三层循环暴力包括了只考虑y,z时的情况
    避免重复,计算时,(m+1)*(n-2)就去除了j=1和j=2两种情况
    当然,如果循环暴力找的起点,从1开始而不从x=0开始,ans+(m+1)*(n-1)也是正确的,不会重复

    #include<stdio.h>
    int main()
    {
        int m,n;
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            int ans=0;
            for(int i=1;i<=m;i++)///for(int i=0;i<=m;i++)
            {
                for(int j=i;j<=m;j++)
                {
                    int sum=i*i+j*j;
                    for(int k=j;k<=m;k++) if(k*k==sum)ans++;
                }
            }///ans+(m+1)*(n-1)
            printf("%d
    ",ans+(m+1)*(n-1));///当0=x时,只要y=z,就行,那么就有(m+1)*(n-1)个,因为y可能从0取到m,j可以从2取到n。
        }///当0!=x时,那么只要一个勾股定理能构成,只要幂大于2,就一下没解,所以我们把第一种中拿出j=2时,的特殊情况,特殊考虑。
    }
  • 相关阅读:
    SPSS时间序列:频谱分析
    PureBasic—数控编辑框与调节块和进度条
    DELPHI2007 安装ACTIVEX插件的方法
    C++ builder的文件操作
    C++动态数组
    excel快速复制大量公式的方法
    Delphi XE5 如何与其他版本共存
    PureBasic 集成Form设计器的使用
    VS C++ 从一个窗口创建另一个窗口
    ENVI 5.0 Beta 体验——影像数据的显示
  • 原文地址:https://www.cnblogs.com/kuronekonano/p/11135837.html
Copyright © 2011-2022 走看看