Arrays 如何减少此代码中的执行时间? 问题

Arrays 如何减少此代码中的执行时间? 问题,arrays,c,Arrays,C,考虑前N个斐波那契数的最后十进制数字的序列D,即D=(F0%10,F1%10,…,FN−1%10) 现在,您应该执行以下过程: Let D=(D1,D2,…,Dl) 如果l=1,则过程结束 创建一个新序列 E=(D2,D4,…,D2⌊l/2⌋) 换句话说,E是通过从D中删除所有奇数索引元素而创建的序列 将D改为E 当该进程终止时,序列D 只包含一个数字。你必须找到这个号码 输入 输入的第一行包含一个整数T 表示测试用例的数量 T测试用例的描述如下。 每个测试用例的第一行也是唯一一行包含一个整

考虑前N个斐波那契数的最后十进制数字的序列D,即
D=(F0%10,F1%10,…,FN−1%10)

现在,您应该执行以下过程:

Let D=(D1,D2,…,Dl)
如果l=1,则过程结束

创建一个新序列

E=(D2,D4,…,D2⌊l/2⌋)
换句话说,E是通过从D中删除所有奇数索引元素而创建的序列

将D改为E

当该进程终止时,序列D 只包含一个数字。你必须找到这个号码

输入 输入的第一行包含一个整数T 表示测试用例的数量

T测试用例的描述如下。 每个测试用例的第一行也是唯一一行包含一个整数N

输出 对于每个测试用例,打印一行,其中包含一个整数―最后剩余的数字

密码
#包括
#包括
int测试(int*arr,int n);
int main(){
int t;
scanf(“%d”、&t);
而(t--){
int n;
scanf(“%d”和“&n”);
int*arr;
arr=(int*)malloc((n+1)*sizeof(int));
arr[1]=0;
arr[2]=1;
对于(int i=3;i,使用

  • 查找最大整数
    A
    ,例如
    2^A
  • 查找
    Fibonnaci(2^A-1)%10
  • 添加到的,其本身基于以下其他答案:

    你最终总会得到2n− 其中n为最大整数,2n 我想指出另一个有用的数学性质

    在数论中,第n个Pisano周期,写为π(n),是取模n的斐波那契数序列重复的周期。 ()

    <这里我们需要考虑n=10,π(10)=60的情况,最后的十进制数字对应于OEIS序列:

    0,1,1,2,3,5,8,3,1,4,5,9,4,3,7,0,7,7,4,1,5,6,1,7,8,5,3,8,1,9,0,9,9,8,7,5,2,7,9,6,5,1,6,7,3,3,6,9,4,9,3,2,5,7,9,1


    因此,不需要计算实际的斐波那契数,也不需要生成N之前的所有序列。

    @4386427:这取决于您是从0还是从1索引。通常斐波那契序列是从0索引的。
    #include <stdio.h>
    #include <stdlib.h>
    
    int test(int *arr, int n);
    
    int main() {
      int t;
      scanf("%d", &t);
      while (t--) {
        int n;
        scanf("%d", &n);
        int *arr;
        arr = (int *)malloc((n + 1) * sizeof(int));
        arr[1] = 0;
        arr[2] = 1;
    
        for (int i = 3; i <= n; i++) {
          arr[i] = arr[i - 1] + arr[i - 2];
        }
    
        /*
        for(int k=1;k<=n;k++){
          printf("%d ",arr[k] );
        }
        printf("\n");
        */
    
        printf("%d\n", (test(arr, n)) % 10);
      }
    }
    
    int test(int *arr, int n) {
      if (n == 1) {
        return arr[1];
      } else {
        for (int i = 1; i <= (n / 2); i++) {
          arr[i] = arr[2 * i];
        }
        return test(arr, n / 2);
      }
    }