問(wèn)題 https://www.codechef.com/problems/MATPH 的鏈接 所以,我在這個(gè)問(wèn)題上停留了幾個(gè)小時(shí),我不知道我錯(cuò)在哪里。我使用Eratosthenes的Sieve來(lái)查找素?cái)?shù),并將所有素?cái)?shù)保存在哈希映射中。在線法官在測(cè)試用例上給了我錯(cuò)誤的答案。 static void dri(int n) { long large=0;int r=0,x,count=0,p,count1=0; x=(int)Math.sqrt(n); //To understand why I calculated x let's take an example //let n=530 sqrt(530) is 23 so for all the numbers greater than 23 when //we square them they will come out to be greater than n //so now I just have to check the numbers till x because numbers //greater than x will defiantly fail.I think you get //what I'm trying to explain while(r<x) { r = map.get(++count); // Prime numbers will be fetched from map and stored in r int exp = (int) (Math.log(n) / Math.log(r)); //To explain this line let n=64 and r=3.Now, exp will be equal to 3 //This result implies that for r=3 the 3^exp is the //maximum(less than n) value which I can calculate by having a prime in a power if (exp != 1) { //This is just to resolve an error dont mind this line if (map.containsValue(exp) == false) { //This line implies that when exp is not prime //So as I need prime number next lines of code will calculate the nearest prime to exp count1 = exp; while (!map.containsValue(--count1)) ; exp = count1; } int temp = (int) Math.pow(r, exp); if (large < temp) large = temp; } } System.out.println(large); }
在代碼庫(kù)上得到錯(cuò)誤的答案。但我的數(shù)學(xué)是正確的
桃花長(zhǎng)相依
2022-08-17 10:06:39
