Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        4年前关闭。
                                                                                            
                
        
香港专业教育学院在我的程序之一中使用了以下功能。

我试图确保我的代码高效,但是我无法在线找到任何帮助来告诉我如何识别可以改进的地方...

有没有人可以帮助您确定我是否可以改进(更快)或提高运行效率的任何方面

z,s和t都是整数

powerMod(z, s, t) {
    int temp = 1;
    while (s > 0) {
        temp = temp * z;
        s = s - 1;
    }
    temp = temp mod t;
    return temp;
}


因此,此函数的总体功能是将z乘以s的幂,然后每次将其修改为n。非常简单,但是我无法弄清楚如何使它更快,因为它将被主程序使用100或1000次

最佳答案

像这样吗?

使用exponentiation by square和ive使用很长时间,以防由于int * int而导致溢出。

 int powMod(int z, int s, int t){
        long result = 1; //int * int will never exceed the size of a long
        long multiplicant = z;
        while(s > 0){
            if(s % 2 == 1) {
                result *= multiplicant;
                result %= t; // do modulo on each temporary result to keep accuracy
            }

            multiplicant *= multiplicant;
            multiplicant %= t;
            s /= 2;

        }
        return result;
    }

关于java - Java有效地改进代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27526979/

10-12 23:55