import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int totalSum(long n, int k) {
long i=1;
long sum=0;
if(n==1||n==2)
return 0;
else{
while(i!=n-1){
sum+=Math.pow((double)(n-i),(double)k);
i++;
}
int c = (int)sum%1000000009;
return c;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int q = in.nextInt();
for(int a0 = 0; a0 < q; a0++){
long n = in.nextLong();
int k = in.nextInt();
int result = totalSum(n, k);
System.out.println(result);
}
in.close();
}
}
约束 - 1&lt; = n&lt; = 10 ^ 18 1·; = K&LT; = 1000 。每当我运行这个程序时,它就会被卡住更大的n值。 有没有其他方法来解决这个程序或降低其复杂性,因为我认为这是阻止我得到答案的唯一方法。
P.S。:任务是 - 您正计划下一届FIFA世界杯,并且您正在计算需要建造的高速公路数量,以便将城市与场地连接起来。 你的国家有n个城市,所有城市都位于一条名为“公路”的直道上。如果你想从城市x到城市y(其中x <= y),你需要经过城市x,x + 1,x + 2 ..... y-1,y。
高速公路的要求如下:
所有比赛将在第n个城市举行。 需要建造新的双向道路,称为超高速公路&#34;,以便可以直接从任何其他城市访问第n个城市。 您还需要支付第二个条件的费用。工程团队知道如果超高速公路的长度为l,那么它将花费l ^ k,其中k是整数常数。城市x和y之间的超高速公路的长度是| x-y |。
对于这个问题,您只需要找到成本的粗略估计,因此,找到总成本模数1000000009。
答案 0 :(得分:0)
考虑使用BigInteger
或BigDecimal
代替long
或double
使用非常大的数字。
见这个例子:
BigInteger bi1, bi2;
int exponent = 2;
bi1 = new BigInteger("6");
// perform pow operation on bi1 using exponent
bi2 = bi1.pow(exponent);
String str = "Result is " + bi1 + "^" + exponent + " = " + bi2;
System.out.println(str);