zoukankan      html  css  js  c++  java
  • 偶数

    题目描述

    给定一个正整数n,请输出杨辉三角形前n行的偶数个数对1000003取模后的结果。

    输入输出格式

    输入格式:

    一个数

    输出格式:

    结果

    输入输出样例

    输入样例#1: 
    6
    
    输出样例#1: 
    6
    

    说明

    对于30%的数据,n<=4000

    对于70%的数据,n<=4*10^9

    对于100%的数据,n<=10^15

    杨辉三角形的前七行:

    1

    1 1

    1 2 1

    1 3 3 1

    1 4 6 4 1

    1 5 10 10 5 1

    1 6 15 20 15 6 1

    分析:

    本题数据范围太大了。。。所以不可能用普通做法,接下来,我决定。。。看题解。。。

    根据kkk大佬题解

    “打出杨辉三角形前若干行的奇偶分布情况,便会发现这是一个分形图形。这样就可以用递归解决问题。具体实现时可以直接计算,也可以先算总个数再减去奇数的数量(比较好算)。用扩展欧几里德或欧拉定理来解决除法取模问题,或是直接用高精计算,最后取模。”

    于是,代码就出来了。

    CODE(根据某大佬代码):

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 long long k,t,n,ans,nx,mi3[1001],d,mod=1000003,a[1001],p;
     5 int main()
     6 {long long i;
     7 //freopen("11.in","r",stdin);
     8     scanf("%lld",&n);
     9     nx=n;
    10      k=0;
    11     d=1;
    12     for (i=1;i<=51;i++)
    13     d*=2;
    14      t=51;
    15     while (n)
    16     {
    17         if (n>=d)
    18         {
    19             n=n-d;
    20             a[++k]=t;    
    21         }
    22         d/=2;
    23         t--;
    24     }
    25     n=nx;
    26     mi3[0]=1;
    27     for (i=1;i<=a[1];++i)
    28      {
    29         mi3[i]=(mi3[i-1]*3)%mod;
    30      }
    31   
    32   for (i=1;i<=k;++i)
    33      ans=(ans+mi3[a[i]]*(long long)(1<<(i-1)))%mod;
    34     //cout<<ans<<endl;
    35     ans%=mod;
    36      p=(((n%mod)*(n%mod+1)))/2;
    37     p%=mod;
    38     if (p<ans)p+=mod;
    39     p=(p-ans)%mod;
    40 printf("%lld
    ",p);
    41 }
  • 相关阅读:
    L6循环神经网络
    L5语言模型与数据集
    L4文本预处理
    L2 Softmax与分类模型
    L3 多层感知机
    L1线性回归
    P4语法(4)Control block
    机器学习笔记(4)Logistic回归
    [CF] Sasha and One More Name
    机器学习笔记(3)多变量线性回归
  • 原文地址:https://www.cnblogs.com/kanchuang/p/11163102.html
Copyright © 2011-2022 走看看