1. 程式人生 > >一個數加上100是個完全平方數,再加上168又是一個完全平方數, (含優化)

一個數加上100是個完全平方數,再加上168又是一個完全平方數, (含優化)

  1. public class HisTime {  
  2.     public static void main(String[] args) {  
  3.         long startTime = System.currentTimeMillis();  
  4.         for (int i = 0; i <100000; i++) {  
  5.             double x = Math.sqrt(i + 100);  
  6.             double y = Math.sqrt(i + 268);  
  7.             if (x == (int) x && y == (int) y) {  
  8.                 System.out.println("這個數是:" + i);  
  9.                 continue;  
  10.             }  
  11.         }  
  12.         long endTime = System.currentTimeMillis();  
  13.         System.out.println("time:" + (endTime - startTime));  
  14.     }  
  15. }  

當然,執行時間為:

雖然只有5ms,可是我看著這兒演算法有點不對,怎麼說呢,這應該是說用計算機用大量的資料強制算出來的,沒體現出演算法的優越性。想想應該有更簡單實用的演算法來計算這個值。

傳遞上演算過程吧,手寫版。

這樣我們就得到了m值的範圍,當然這是一個方面。(區間為[11,83],寫錯了 大笑

然後,其實雖然Java的Math庫提供了許多實用的API,個人覺得開方應該比平方的運算耗時,當然這在單獨的少量資料時,感覺不明顯。

自己的程式碼:

[html] view plain copy  print?
  1. public class TestTime {  
  2.     public static void main(String[] args) {  
  3.         TestTime testTime = new TestTime();  
  4.         long startTime
     = System.currentTimeMillis();  
  5.         // 確定 m的值範圍  
  6.         for (int i = 11; i <= 83; i++) {  
  7.             // 得到 x的值  
  8.             double x = testTime.testDataM(i);  
  9.             // 判斷 n是否為整數  
  10.             if (testTime.testDataN(x)) {  
  11.                 System.out.println("這個數是:" + x);  
  12.             }  
  13.         }  
  14.         long endTime = System.currentTimeMillis();  
  15.         System.out.println("time:" + (endTime - startTime));  
  16.     }  
  17.     // 判斷該數值是否符合: x+100=m^2  
  18.     public double testDataM(double data) {  
  19.         // 求得: m^2  
  20.         double mPow = Math.pow(data, 2);  
  21.         // 獲取x的值  
  22.         double value = mPow - 100;  
  23.         return value;  
  24.     }  
  25.     // 判斷該數值是否符合:x+100+186=n^2  
  26.     public boolean testDataN(double data) {  
  27.         // 獲取:n^2  
  28.         double mPow = data + 100 + 168;  
  29.         // 對n 開方  
  30.         double value = Math.sqrt(mPow);  
  31.         // 判斷 n開方後是否是整數  
  32.         if (value == (int) value) {  
  33.             return true;  
  34.         }  
  35.         return false;  
  36.     }  
  37. }  

這個程式碼多了幾倍,呵呵。我寫了註釋的啦。

下面是執行的時間:

結果是1ms,效能提升很高,不是麼??

相關推薦

個數加上100完全平方,加上168又是一個完全平方, (優化)

public class HisTime {       public static void main(String[] args) {           long startTime = System.currentTimeMillis();           

Python經典練習題1:一個整數,它加上100後是一個完全平方加上168又是一個完全平方,請問該是多少?

span range pytho 能夠 break clas 完全平方數 imp 經典 Python經典練習題 網上能夠搜得到的答案為: for i in range(1,85): if 168 % i == 0: j = 168 / i;

一個整數,它加上100後是一個完全平方加上168又是一個完全平方,請問該是多少?

首先,求完全平方數的取值範圍:        假設兩個數之差為一,並且他兩個的完全平方數之差為168,這兩個數最大隻有83;        假設兩個數中最小為84,84*84+168<85*85,加168後無法

題目:一個整數,它加上100後是一個完全平方加上168又是一個完全平方,請問該是多少?

題目是copy的csdn論壇裡面的。當時,樓主給出了演算法: public class HisTime { public static void main(String[] args) { long startTime = System.currentTimeMil

第三題:一個整數,它加上100後是一個完全平方加上168又是一個完全平方,請問該是多少?

第三題:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? 設這個整數是X,根據題目:x+100=n*n,x+100+168=n*n+168=m*m 方法一:簡

【程式13】 題目:一個整數,它加上100後是一個完全平方加上168 又是一個完全平方,請問該是多少?

/* 2017年3月6日15:19:01 java基礎50道經典練習題 例13 Athor: ZJY Purpose: 【程式13】 題目:一個整數,它加上100後是一個完全平方數,再加

【單調棧】求個數組第一比他小的的位置

type 技術分享 bit esp alt log lap while play 【AC】 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int

個數組中的各節點按照層次遍歷插入構成完全二叉樹

按層次構建完全二叉樹 (本人入門水平,這是我的第一篇部落格,希望通過寫寫部落格能增強自己的理解,同時也能給大家提供一些力所能及的幫助,通過這個平臺共同進步,有錯誤的地方希望各位大佬指出來,我會努力改正的,謝謝大家!) 1.主要思想:         由於是層次

題目描述 在一個二維組中(每個組的長度相同),每一行都按照從左到右遞增的順序排序,每列都按照從上到下遞增的順序排序。請完成一個,輸入這樣的一個二維組和一個整數,判斷組中是否含有該整數。

這樣的 -i 一個 整數 描述 輸入 遞增 lse i+1 題目描述 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 1

在10000以內判斷一個整數,它加上100加上268後都是一個完全平方 3 提問:請問該是多少?

and pan class 多少 div mat code 請問 提問 1 ‘‘‘ 2 在10000以內判斷一個整數,它加上100和加上268後都是一個完全平方數 3 提問:請問該數是多少? 4 ‘‘‘ 5 import math 6 for i in ran

一個整數,加上100後是一個完全平方加上168,還是一個完全平方,求該整數。(JAVA)

分析問題: 由題意可知: 1、這個整數加上100後是完全平方數,而完全平方數不為0,所以有可能是完全平方數的數最小為-100。 2、完全平方數均為整數,那麼列舉法(窮舉法)就可以很好的解決這個問題。 程式清單 import java.util.Scanner; public

如何判斷個數完全平方

bool isSqr(int n){    int a = (int)(sqrt(n) + 0.5);  //四捨五入求整,又學到一招     return a * a == n;} bool isSqr(int n) {     int a = (int)(sqrt(n)

python判斷個數是不是完全平方

思路: 完全平方數開根號後是一個整數,非完全平方數開根號的話是一個非整數開根號後取整,如果開根號後是整數的話就不會改變值的大小取整後再平方,如果值和之前一樣,說明是完全平方數import math def isSqr(n): a = int((math.sqrt(

怎麼判斷個數是否為完全平方

在不使用浮點函式sqrt的情況下,我們有一些比較好的演算法: 1.利用恆等式: 1+3+5+7+....+(2*n-1)=n^2 bool isSqrt(int n) { for(int i=1;n>0;i+=2) n-=i; return 0 == n;

已知個數組int[98],該組裡面儲存了0~99共100數字中的98,數字不重複,請用演算法算出0~99中缺少的2數字是哪兩

public class Test24 {public static void main(String[] args) {int[] num=in();//生成陣列noNumber(num);//判斷不同的數} public static int[] in() {      int[] array = new

合並排序,將兩已經排序的組合並成個數

n) ring 一個數 合並排序 sizeof 並排 names 排序 name #include<iostream> #include<string.h> using namespace std; void MergeArray(int a[]

選取10-100之間的10數字,存入個數組,並排序

一個數 隨機 調用 定義 -m 函數 實現 == turn //選取10-100之間的10個數字,存入一個數組,並排序//實現該功能函數function randomNub(arr,len,min,max){ //如果給的長度大於取值範圍,則超出提示 if(len&

輸入10整數,將其中最小的與第一個數對換,把最大的與最後個數對換。寫三函式; ①輸入10個數;②進行處理;③輸出10個數

import java.util.Scanner; public class Main {     public static void main(String[] args){         Scanner sc = new Scann

一個輸入的陣列中長度為101,陣列範圍[1,100],存在個數重複,找出重複的

  /********************************************* *函式功能: 一個輸入的陣列中長度為101,陣列範圍[1,100],存在一個數重複,找出重複的數 *引數說明 * 輸入: [1,2,4,5,6,...,39,39,40,41,