首页 > 其他分享 >luogu2_fenzhi_math

luogu2_fenzhi_math

时间:2023-07-13 20:13:04浏览次数:37  
标签:10 fenzhi int memset times luogu2 ans sizeof math

知识点:快速幂 高精 负进制

分治

P1226 【模板】快速幂||取余运算

https://www.luogu.org/blog/costudy/base-2

就看这一篇题解!!!

然后下面备份一下代码:

int quickPow(int a,int b){
	int ans=1;
  while(b){
     if(b&1)//b是奇数吗?(最后一位是1)
    		ans*=a;
  	a*=a;
    b>>=1;//b/2 这里千万别忘了加b=
  }
	return ans;
}

P1908 逆序对

以单独开贴 逆序对

简单数学问题

P1088 火星人

P1045 麦森数

求2^p-1位数

  • 求\(2^p-1\)位数等于求\(2^p\)位数,因为\(2^p\)最后一位不可能为0。

  • 数\(10^n\)位数一定是\(n+1\),因此考虑改写成以10为底的x次幂

    问题变成:\(10^x=2^p,求x\)

  • 解得,\(x=log_{10}{2^p=p·log_{10}2}\), 所以位数为 \(p·log_{10}2+1\)

高精乘法

先想明白这个问题:一个数a[20]位,一个数b[20]位。相乘结果最多有多少位?

40位。小学生都会的你不会。

下面看具体的高精度乘法:

  • 首先每个数在数组里都是倒着存的。这一点一定要想明白啊。比如25存在高精里就是{5,2,0,……,0} 倒着看就是00025了。

  • 求a=a*b 看代码

    a[10]={5,2,0};b[10]={5,2,0},c[10];
    
    memset(c,0,sizeof(c));//c清零用于临时计算结果
    //如果直接用a存a*b的值,a本身就在变化
    
    for(i:0..10){
      for(j:0..10){
        c[i+j]+=a[i]*a[j];//注意这里是 += 啊!!!!!!
      }
    }//不带进位乘完了
    for(i:0..10){
      c[i+1]=c[i]/10;
      c[i]%=10;
    }//处理进位
    
    memcpy(a,c,sizeof(a));//计算完毕
    

本题其他细节:

  • <cmath>头文件中有log10()方法。前面记得加(int)把double转成int

  • memset(a,0,sizeof(a)) 给数组赋值(关于这个函数请注意看下题,只能用于初始化内存)

    memcpy(a,b,sizeof(a))b复制到a

    这两个方法在cstring头文件

P1403 [AHOI2005]约数研究

  • 问题来了:memset(a,2, sizeof a);怎么不能用啊

    memset() 是按字节拷贝。一个字节8位

    而一个int是4个字节。就是32位。

    现在对数组a[]的每个字节赋值2。就是每8位变成: 00000010

    那数组里的每个数字都变成了:

    00000010 00000010 00000010 00000010

    所以说memset()这东西就初始化内存赋值0的时候好使。其他时候反而不好用了!

  • 使用fill()赋值:

    fill(a,a+n,2);
    

然后这题逻辑上比较简单,和用筛法求素数一个道理。简单题。

P1017 进制转换

知识点:负进制

简述:负进制转换和正进制一样都是相除取余数再倒着输出就是结果。

其关键在于:余数是负数时,总不能1011-100-1这么拼接吧。

因此让 负余数-进制得到正余数,同时商要+1

$ x \div y = n ···m$ 化成> $ x \div y = n+1 ···m-y$

正确性证明:

\[y\times n+m=x \]

\[y\times (n+1)+m-y=y\times n+y+m-y=y\times n+m=x \]

领悟一下吧。下面循环代码直观地复现了这个过程

while (n){
        int m=n%r;
        n/=r;
        if(m<0)//余数为负时需要处理
        {
            m-=r;//余数化为正
            n++;//商+1
        }
        if(m>=10)
            ans=(char)('A'+m-10)+ans;//倒输出 新位放在前
        else
            ans=(char)('0'+m)+ans;
}

P1147 连续自然数和

经典题,剑指Offer 41、LeetCode 829. 其中LeetCode最难。

尺取法。

此方法过不了LeetCode: 数据太大超时,\(O(n)\)都不过。必须优化成\(O(log_n)\)

思路看代码:

for (int i = 0,j=1,sum=1; i <=m/2;) {
  //初始队列[0,1],终止条件,队头数字为m/2,加上后面的肯定超了。
  //可不可取m/2呢。是可以的。因为奇数/2向下取整。
    if(sum==m){
        cout<<i<<' '<<j<<"\n";//符合
        sum-=i;//去掉第一个数
        i++;//去掉第一个数后 第一个数变成i++
    }
    if(sum<m){//不够
        j++;	//先加长序列
        sum+=j;//再更新和
    }
    if(sum>m){//超了
        sum-=i;//这次要先去掉第一个数
        i++;	//去掉第一个数后 第一个数变成i++
    }
}

公式法

设端点为【L,R】,有\((L+R)(R-L+1)/2=M\),即求x,y

令 \(L+R=X,R-L+1=Y\),

即求\(X\times Y=2M\)满足的X、Y值。

有了满足条件的两个因子X、Y后。可解得:

$L=(X-Y+1)/2 $ , $R=(X+Y-1)/2 $

L和R都是整数,从R的式子可推出X、Y必须一奇一偶。

X先取\(\sqrt{2M}\)。随着X减小,Y会不断增大。

代码:

int ans=1;
for(int x=(int)sqrt(2*N);x>1;x--){
    if(2*N%x==0){
        int y=2*N/x;
        if((y-x+1)%2==0&&(x&1)^(y&1))
            ans++;
    }
}

可过LeetCode

P1029 最大公约数和最小公倍数问题

  • 辗转相除法
int gcd(int a,int b){
    if(b==0)
        return a;
    return gcd(b,a%b);
}
  • \(a\times b =(a和b的最大公约数) \times(a和b的最小公倍数)\)

标签:10,fenzhi,int,memset,times,luogu2,ans,sizeof,math
From: https://www.cnblogs.com/xuanshan/p/17551997.html

相关文章

  • 【NSSCTF逆向】【2023题目】《easyAPK》《math》
    总览easyapk安卓逆向java加密扩展AESbase58mathelf五元一次方程算法逆向题目easyAPK解法第一次做有关安卓逆向的题目,没有工具没有思路,就结合别的师傅的wp来做题吧。下载下来是一个apk,尝试了一些模拟器,没能成功,拿出以前的手机安装看看。出来的是一个登录界面。那......
  • 【解决】Mathtype公式插入word后,总是会自动变形。
    【问题】如题【解决】参考:Word里面的Mathtype公式会变形(字体)怎么处理?七年之痒的回答。选中公式,在word标签栏中选择mathtype→转换公式。 按照如图进行设置,然后点击“转换”即可。 ......
  • 2023年北京大学强基计划数学试题Mathematica解答
    目录试题地址123571011141617试题地址全网首发!2023年北京大学强基计划笔试数学试题(全!)-ADU的小窝的文章-知乎https://zhuanlan.zhihu.com/p/6404156211emmm比如说三个点的实部,虚部分别是:有理数,无理数无理数,有理数有理数,无理数有理数+无理数+有理数可以是有理数......
  • 博客园:使Mathjax支持TEX公式输入
    解决办法打开博客管理后台,打开“设置”,找到“页首HTML代码”选项,添加以下代码即可:参考文章[1]博客园中使用MathJax......
  • Mathtype6.9安装与输入中文乱码问题
    Mathtype6.9下载地址(含替换文件):链接:https://pan.baidu.com/s/1cIXqrhIpjb0EcEKgwVnOJw提取码:28d3也可以自己下载替换文件:http://xiazai.mathtype.cn/mathtype.exe.rep1.安装mathtype2.打开安装文件3.将替换文件复制过来4.删除原mathtype.exe文件5.删除替换文件后缀.rep ......
  • JavaScript学习 -- 内置函数(Math和Date)
    一、Date函数letdate=newDate()console.log("当前日期和时间:"+date)console.log("当前日期和时间:"+date.toLocaleString())console.log("年份:"+date.getFullYear())console.log("月份:"+(parseInt(date.getMonth())+1))console.log("日:"......
  • DZY Loves Math
    题面对于正整数\(n\),定义\(f(n)\)为\(n\)所含质因子的最大幂指数。例如\(f(1960)=f(23×51×72)=3,f(10007)=1,f(1)=0\)。给定正整数\(a,b\),求下式的值:\[\sum_{i=1}^a\sum_{j=1}^bf(\gcd(a,b))\]题解在下文的推导中,为避免歧义,设\(N=\min(a,b),M=\max(a,b)\),......
  • 2023 math
    已知集合\(M=\left\{-2,-1,0,1,2\right\}\),\(N=\left\{x\left|x^{2}-x-6\geq0\right.\right\},\)则\(M\capN=\)A.\(\{-2,-1,0,1\}\)B.\(\{0,1,2\}\)C.\(\{-2\}\)D.22.已知\(z=\frac{1-i}{2+2i}\),则\(z-\overline{z}=\)A.-iB.i......
  • (十)Math对象API、数学对象、布尔对象
    一、MathAPI 二、数字对象 三、布尔对象 ......
  • MATH is the LOGIC OF CERTAINTY and STATISTICS is the LOGIC OF UNCERTAINTIES
    Statistics110ofHarvardUniversity: Mathisthelogicofcertainty,Statisticsisthelogicofuncertainty. Strategicpractice:Clarity;Honesty......