一個數加上100是個完全平方數,再加上168又是一個完全平方數, (含優化)
- public class HisTime {
- public static void main(String[] args) {
- long startTime = System.currentTimeMillis();
- for (int i = 0; i <100000; i++) {
- double x = Math.sqrt(i + 100);
- double y = Math.sqrt(i + 268);
-
if (x == (int) x && y == (int) y) {
- System.out.println("這個數是:" + i);
- continue;
- }
- }
- long endTime = System.currentTimeMillis();
- System.out.println("time:" + (endTime - startTime));
- }
- }
當然,執行時間為:
雖然只有5ms,可是我看著這兒演算法有點不對,怎麼說呢,這應該是說用計算機用大量的資料強制算出來的,沒體現出演算法的優越性。想想應該有更簡單實用的演算法來計算這個值。
傳遞上演算過程吧,手寫版。
這樣我們就得到了m值的範圍,當然這是一個方面。(區間為[11,83],寫錯了 )
然後,其實雖然Java的Math庫提供了許多實用的API,個人覺得開方應該比平方的運算耗時,當然這在單獨的少量資料時,感覺不明顯。
自己的程式碼:
[html] view plain copy print?- public class TestTime {
- public static void main(String[] args) {
- TestTime testTime = new TestTime();
-
long startTime
- // 確定 m的值範圍
- for (int i = 11; i <= 83; i++) {
- // 得到 x的值
- double x = testTime.testDataM(i);
- // 判斷 n是否為整數
- if (testTime.testDataN(x)) {
- System.out.println("這個數是:" + x);
- }
- }
- long endTime = System.currentTimeMillis();
- System.out.println("time:" + (endTime - startTime));
- }
- // 判斷該數值是否符合: x+100=m^2
- public double testDataM(double data) {
- // 求得: m^2
- double mPow = Math.pow(data, 2);
- // 獲取x的值
- double value = mPow - 100;
- return value;
- }
- // 判斷該數值是否符合:x+100+186=n^2
- public boolean testDataN(double data) {
- // 獲取:n^2
- double mPow = data + 100 + 168;
- // 對n 開方
- double value = Math.sqrt(mPow);
- // 判斷 n開方後是否是整數
- if (value == (int) value) {
- return true;
- }
- return false;
- }
- }
這個程式碼多了幾倍,呵呵。我寫了註釋的啦。
下面是執行的時間:
結果是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&
定義一個含有30個整型元素的數組,按順序分別賦予從2開始的偶數;然後按順序每五個數求出一個平均值,放在另一個數組中並輸出
utf-8 http 效果圖 har ++ [] utf 下標 javascrip <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title><
輸入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,