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 }
  • 相关阅读:
    jvm性能调优---jstat的用法
    flume-ng+Kafka+Storm+HDFS 实时系统搭建
    proxool
    Shell实现跳板机,为什么用跳板机
    JUC回顾之-ThreadPoolExecutor的原理和使用
    java集合之ArrayList的实现原理
    JMeter性能测试介绍学习一
    基础知识《十三》深入浅出Java回调机制
    怎样将myeclipse里默认编码设置成utf-8
    《转》怎样看待比自己强的人
  • 原文地址:https://www.cnblogs.com/kanchuang/p/11163102.html
Copyright © 2011-2022 走看看