您現在的位置是:首頁 >生活 > 2023-07-31 22:18:08 來源:
java小程序二維碼怎么生成(java小程序)
大家好,我是小華,我來為大家解答以上問題。java小程序二維碼怎么生成,java小程序很多人還不知道,現在讓我們一起來看看吧!
1、假設:和為s,積為p,兩個整數為a和b,其中s=a+b, p=a*b,稱其為一對 第1步:我不知道這兩個整數是多少,但我肯定你也不知道。
2、 這說明: 我不知道:s至少是兩對整數的和,如果僅有一對的話,即a+b=s,那么“我”就知道這兩個數是什么了,如5。
3、 2、我肯定你也不知道:對于所有相加等于s的兩個整數,他們的乘積p,至少有兩對整數的乘積與p相等,同上,如果只有一對整數的乘積等于p,那么“你”就肯定知道這兩個數了。
4、 換句話說,這兩個數不能都是質數 對于和為s的所有整數對,都要滿足2,這就是“我肯定”的意思,因為只要有一對全部都是質數的話,“我”就不能“肯定”了。
5、 所以,找到和為s,積為p,但不同時為質數的所有整數對 結果:和為11,17,23,27,29,35,37,41,47,51,53的整數滿足條件 第2步:我本來不知道這兩個數是多少。
6、但既然你這么說,那我現在知道了。
7、 這說明: 對于乘積為p的所有整數對,至少有一對他們的和是第1步結果之一 2、“我現在知道”說明對于乘積為p的整數對中,只有一對的和是第1步結果之一,如果不止一對的話,“我”還是不能確定。
8、 所以:對于第1步結果中所有可能的整數對,相乘得到p,再統計所有乘積為p的整數對的和在第1步結果中出現的次數,出現次數為1的即為結果。
9、 結果:整數對為4,13,他們和是s=17,他們的乘積為p=52 只回答第三題 import java.util.*; public class FindOut { static int MIN = 2; static int MAX = 99; static boolean[] available = new boolean[(MAX+MIN+1) * 2]; public static void main(String[] args) { loop1:for (int s=MIN*2; s<=MAX*2; s++) { available[s] = false; Vectorv = getAddFactors(s); int len = v.size(); if (len < 2) { continue loop1; } for (int i=0; i v = getAddFactors(s); int index = indexOfAvailableSum(v); if (0 <= index) { IntPair ip = v.get(index); System.out.println("Result is: " + ip.l + "," + ip.r + " and sum=" + s + ", product=" + ip.l*ip.r); } } } } static Vector getAddFactors(int sum) { Vector v = new Vector(); int max = Math.min((int)((sum+1)/2), MAX); for (int i=MIN; i<=max; i++) { int j = sum - i; if ((i <= j) && (j<=MAX)) { v.add(new IntPair(i, j)); } } return v; } static boolean isPrimePair(IntPair ip) { for (int i=2; (i*i)<=ip.l; i++) { if (ip.l % i == 0) { if ( (ip.r*i)<=MAX ) { return false; } } } for (int i=2; (i*i)<=ip.r; i++) { if (ip.r % i == 0) { if ( (ip.l*i)<=MAX ) { return false; } } } return true; } static int indexOfAvailableSum(Vector v) { int result = -1; int len = v.size(); int[] count = new int[len]; for (int i=0; i。
本文到此講解完畢了,希望對大家有幫助。