经过一些研究,我发现它归结为第n个纤维数的简单计算,但是n可以变得非常大,因此O(n)解决方案不会有任何好处.谷歌搜索我发现你可以计算O(logn)中的第n个fib数,也可以计算出完全相同的代码示例:
long long fibonacci(int n)
{
long long fib[2][2]= {{1,1},{1,0}},ret[2][2]= {{1,0},{0,1}},tmp[2][2]= {{0,0},{0,0}};
int i,j,k;
while(n)
{
if(n&1)
{
memset(tmp,0,sizeof tmp);
for(i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++)
tmp[i][j]=(tmp[i][j]+ret[i][k]*fib[k][j]);
for(i=0; i<2; i++) for(j=0; j<2; j++) ret[i][j]=tmp[i][j];
}
memset(tmp,0,sizeof tmp);
for(i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++)
tmp[i][j]=(tmp[i][j]+fib[i][k]*fib[k][j]);
for(i=0; i<2; i++) for(j=0; j<2; j++) fib[i][j]=tmp[i][j];
n/=2;
}
return (ret[0][1]);
}
Run Code Online (Sandbox Code Playgroud)
我试图修改它以解决问题,我仍然得到WA:http://ideone.com/3TtE5m
我计算模运算错了吗?或者是其他问题?
我必须在另一个线程中运行一些任务,当该线程run()方法中满足某些条件时,我必须显示一个带有图片的弹出窗口,但是尝试这样做会导致一个异常,告诉我我不能在主 UI 线程之外创建任何阶段,现在有没有办法解决这个问题,我可以以某种方式从我的自定义线程访问 UI 线程并让它显示阶段吗?(注意:由于应用程序的性质,我必须使用自定义线程来检查条件,因为有 8 个不同的线程同时检查相同的条件。)
例外:
Exception in thread "Thread-4" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4
Run Code Online (Sandbox Code Playgroud)