zoukankan      html  css  js  c++  java
  • poj 1543 Perfect Cubes(注意剪枝)

    Perfect Cubes
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 14901   Accepted: 7804

    Description

    For hundreds of years Fermat's Last Theorem, which stated simply that for n > 2 there exist no integers a, b, c > 1 such that a^n = b^n + c^n, has remained elusively unproven. (A recent proof is believed to be correct, though it is still undergoing scrutiny.) It is possible, however, to find integers greater than 1 that satisfy the "perfect cube" equation a^3 = b^3 + c^3 + d^3 (e.g. a quick calculation will show that the equation 12^3 = 6^3 + 8^3 + 10^3 is indeed true). This problem requires that you write a program to find all sets of numbers {a,b,c,d} which satisfy this equation for a <= N.

    Input

    One integer N (N <= 100).

    Output

    The output should be listed as shown below, one perfect cube per line, in non-decreasing order of a (i.e. the lines should be sorted by their a values). The values of b, c, and d should also be listed in non-decreasing order on the line itself. There do exist several values of a which can be produced from multiple distinct sets of b, c, and d triples. In these cases, the triples with the smaller b values should be listed first.

    Sample Input

    24

    Sample Output

    Cube = 6, Triple = (3,4,5)
    Cube = 12, Triple = (6,8,10)
    Cube = 18, Triple = (2,12,16)
    Cube = 18, Triple = (9,12,15)
    Cube = 19, Triple = (3,10,18)
    Cube = 20, Triple = (7,14,17)
    Cube = 24, Triple = (12,16,20)

    题意:找出2到n中,所有满足a^3=b^3+c^3+d^3的a,b,c,d的数
    #include<stdio.h>
    #include<string.h>
    #include<cstdio> 
    #include<string>
    #include<math.h>
    #include<algorithm>
    #define LL long long
    #define PI atan(1.0)*4
    #define DD double
    #define MAX 2002000
    #define mod 100
    #define dian 1.000000011
    #define INF 0x3f3f3f
    using namespace std;
    int main()
    {
        int n,m,j,i,t,k,l;
        int vis[1000];
        int a[150];
        while(scanf("%d",&n)!=EOF)
        {
        	for(i=1;i<=n;i++)
        	a[i]=pow(i,3);
        	for(i=6;i<=n;i++)
        	{
        		memset(vis,0,sizeof(vis));
        		for(j=2;j<i;j++)
        		{    
    			    if(a[i]<a[j]+a[j+1]+a[j+2])
    				    break;		
        			for(k=j;k<i;k++)
        			{   
    				    if(a[i]<a[j]+a[k]+a[k+1]) break;								
        				for(l=k;l<i;l++)
        				{
        					if(a[i]==a[j]+a[k]+a[l])
        					{
        						printf("Cube = %d, Triple = (%d,%d,%d)
    ",i,j,k,l);
        					}
        				}
        			}
        		}
        	}
        }
    	return 0;
    }
    

      

  • 相关阅读:
    济南学习D1T5__HEAP
    快速计算C(n,r)
    快速阶乘算法
    济南学习D2T1__折纸带
    济南学习D3T1__线性筛和阶乘质因数分解
    栈与队列:栈的链式储存结构
    线性表应用:建立一个随机数 链表获得中间结点
    栈与队列应用:二进制转十进制 八进制 十六进制(栈)
    线性表:单链表基本操作代码
    线性表应用:魔术师发牌与拉丁(Latin)方阵(循环链表)
  • 原文地址:https://www.cnblogs.com/tonghao/p/5292583.html
Copyright © 2011-2022 走看看