qx的博客

博客

Tags
None

扩域

2024-04-19 19:31:51 By qx

提供一个可以处理无理数的黑科技。

定义新的虚数单位 i,i=5.

对于 fib 数列的通项公式:

Fn=15[(1+52)n(152)n]

5 视作虚数单位。原式可化为:

Fn=1i[(1+i2)n(1i2)n]

需要注意: i2=52=5.

zz=(a+bi)(c+di)=ac+(ad+bc)i+bdi2=ac+5bd+(ad+bc)i

答案是其实数部分。

#include <bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
ll p=1e9+7;
struct cplx{
    ll a,b;
    cplx(ll A=0,ll B=0): a(A), b(B) {}
    cplx operator +(const cplx& tt)const{
        ll u=a+tt.a,v=b+tt.b;
        return cplx(u%p,v%p);
    }
    cplx operator -(const cplx& tt)const{
        ll u=a-tt.a+p,v=b-tt.b+p;
        return cplx(u%p,v%p);
    }
    cplx operator *(const cplx& tt)const{
        ll u=a*tt.a+5*b*tt.b,v=a*tt.b+b*tt.a;
        return cplx(u%p,v%p);
    }
}; 
ll qpow(int a,int b){
    ll base=a,res=1;
    while(b){
        if(b&1)  res=res*base%p;
        base=base*base%p, b>>=1;
    }
    return res;
}
cplx Qpow(cplx a,int b){
    cplx base=a,res=cplx(1,0);
    while(b){
        if(b&1)  res=res*base;
        base=base*base, b>>=1;
    }
    return res;
}
signed main(){
    ll n; cin>>n;
    ll inv2=qpow(2,p-2);
    cplx x=cplx(inv2,inv2);
    cplx y=cplx(inv2,p-inv2);
    cplx xx=Qpow(x,n),yy=Qpow(y,n);
    cplx res=xx-yy;
    ll ans=res.b;
    printf("%lld\n",ans%p);
}

性质 P

2024-03-09 13:08:00 By qx

整数 n ,如果存在整数 x,y,z 满足 n=x3+y3+z33xyz ,则称 n 具有性质 P,在 1,5,2013,2024 中,那些数具有性质 P,那些数不具有性质 P?请说明理由。

题外话

问题并非我所解决,是由同学解决的。

下面的话语是我的胡言乱语,并不能当作可以获得满分的正确解答。

被同学嘲讽了。不过貌似确实很简单的样子。

在此膜拜一下。顺手写一篇解。

解:

原式

=(x+y+z)(x2+y2+z2xyzxzy)

=(x+y+z)[(x2+y2+z2+2xy+2xz+2yz)3xy3xz3yz]

=(x+y+z)[(x+y+z)23(xyxzyz)]

a=x+y+z,b=xyxzyz.

a,b 均为整数。

原式 =a(a23b)

\therefore a,(a^2+3b) 必有一是 3 的倍数。

分类讨论如下:

\color{white}{ }

1 ^{\circ} 3|a,3|a^2.

\therefore 3|a^2-3b

3 \nmid (a^2-3b). 并不存在满足条件的 a,b.

\color{white}{ }

2 ^{\circ} 3|a^2,3|a^2-3b, 3|a.

3 \nmid a. 并不存在满足条件的 a,b.

\color{white}{ }

综上所述,没有满足条件的 a,b,c ,故 2013 不具有性质 P

1x=1,y=0,z=0 时可以使原式成立,故满足性质 P.

5x=1,y=2,z=2 时可以使原式成立,故满足性质 P.

2024x=674,y=675,z=675 时可以使原式成立,故满足性质 P.


另外三数

也许你很想知道另外三个数我是如何得出来的。因为一次一次像证明无解一样做太过冗长。提供一种快速的凑数方法。

先给一张表吧。

1 1 1 -> 0
1 1 2 -> 4
1 2 2 -> 5
2 2 2 -> 0
2 2 3 -> 7
2 3 3 -> 8
3 3 3 -> 0
3 3 4 -> 10
3 4 4 -> 11
4 4 4 -> 0
4 4 5 -> 13
4 5 5 -> 14
5 5 5 -> 0
5 5 6 -> 16
5 6 6 -> 17
6 6 6 -> 0

左边三个数是 x,y,z ,右边是代入原式之后的值。

可以看见,x=y=z 时原式 =0.

但是如果有一个数增加 1 会变成如下形式:

(x+1)^3 + x^3 + x^3 - 3(x+1)x^2 = 3x+1

两个数增加 1 会变成如下形式:

(x+1)^3 + (x+1)^3 + x^3 - 3(x+1)^2x = 3x+2

由于另外三个数都不是 3 的倍数,所以代入这两个式子进去马上就可以求出答案。甩出来就是满足条件的 x,x+1.

当然,如果你偏爱真相的话还是可以用正解作答的。在这里只不过是提供一种用谎言骗取考试时间的方法罢了。总之。

\texttt{solved}

补充说明

警告: 下面含有大量胡言乱语。但是我相信你一定会看得懂的。

应邱老追问。补充一段分类讨论之中的证明。

a 是整数,a^2 的每一个质因子出现个数都是 a 中出现的两倍。这个是幂的运算部分。不多阐述。而 a^2 由于 a 是整数,所以每一个质因子都至少出现了两次。那么在 a=\sqrt{a^2} 中每一个质因子出现次数都会减去一半,但是最后还是多于一次。

这样的话 a 出现的因子和 a^2 是一样的。

所以说 3|a \iff 3|a^23b 由于 b 是整数也一定会含有一个因子 3 两个数相加后一定也会有一个因子 3 。这是乘法分配律。

如果你需要详细的解释那么我想应该是下面这样的:

a=3k,则 a+3b=3k+3b=3(k+b)k,b 同样是整数所以加和同样也是整数。乘上 3 之后当然就会有一个因子是 3

你可能还很想知道为什么在 2013 的不具性质 P 的证明中, a,(a^2+3b) 为什么必定会有一个含有因子 3 吧?

那么我来告诉你。如果两个数都不含有因子 3 的话,那么随之它们的乘积 2013 也不应该会含有因子 3.2010 一样,这些 3 的倍数无论拆分成哪两个因子想成最终都仍然会有一个含有因子 3.

这个可以通过代数基本定理证明吧。但是我累了不想写了。如果不能证明的话那就说明我又开始胡思乱想了。虽然这句话本身就是胡言乱语的一部分。

a+b problem 题解

2024-01-31 23:40:19 By qx

先把一个单项式理解为:

符号,系数的绝对值,字母,指数。

为了方便操作,一口气读完整个字符串(数组),然后去扫描。

因为如果第一项为整数的话没有符号,判一判。

读入系数的绝对值像快读。

如果有 \texttt{^} 这个符号,读一下之后的指数。

由于只有三个字母,所以可以复制粘贴,不用写冗余的 \texttt{for} 循环。代码如下:

inline void change(polygon &a,char *s1){
    int l1=strlen(s1+1);
    for(int i=1;i<=l1;){
        int fl=1,x=0;
        d w1=nw,w2=nw,w3=nw;
        if(s1[i]=='+'||s1[i]=='-') fl=(s1[i]=='+'?1:-1),++i;
        while(isdigit(s1[i])) x=x*10+(s1[i]-'0'),++i;
        if(s1[i]=='x') w1.alpha=s1[i],++i;
        if(s1[i]=='^') ++i;
        while(isdigit(s1[i])) w1.digit=w1.digit*10+(s1[i]-'0'),++i; 
        w1.digit=!w1.digit?w1.alpha=='x':w1.digit;
        if(s1[i]=='y') w2.alpha=s1[i],++i;
        if(s1[i]=='^') ++i;
        while(isdigit(s1[i])) w2.digit=w2.digit*10+(s1[i]-'0'),++i; 
        w2.digit=!w2.digit?w2.alpha=='y':w2.digit;
        if(s1[i]=='z') w3.alpha=s1[i],++i;
        if(s1[i]=='^') ++i;
        while(isdigit(s1[i])) w3.digit=w3.digit*10+(s1[i]-'0'),++i; 
        w3.digit=!w3.digit?w3.alpha=='z':w3.digit;
        if(w1.alpha=='x'||w2.alpha=='y'||w3.alpha=='z') 
            a.x[{w1.digit,w2.digit,w3.digit}]+=fl*x;
        else a.q+=fl*x;
    }
}

然后考虑存储,约定一个结构体 str ,存储三个 \texttt{int} 变量 x,y,z 的质数。然后放进 \texttt{map} 里。映射项的系数。记得按照约定重载小于运算符。

定义一个多项式结构体,由一个 \texttt{map} 以及一个存储多项式常数的整型组成。

struct str{ 
    int x,y,z; 
    bool operator < (const str b) const{
        if(x+y+z!=b.x+b.y+b.z) return x+y+z>b.x+b.y+b.z;
        if(x!=b.x) return x>b.x;
        if(y!=b.y) return y>b.y;
        return z>b.z;
    }
};
struct polygon{    map<str,int> x; int q; }a,b,c;

表示 A,B,A+B.

合并同类项就扫一遍两个 \texttt{map} ,然后让新的 A+B 的每一项系数加上原来的系数。

inline void add(void){
    for(auto it:a.x) c.x[{it.first.x,it.first.y,it.first.z}]+=it.second;
    for(auto it:b.x) c.x[{it.first.x,it.first.y,it.first.z}]+=it.second;
    c.q=a.q+b.q;
}

然后按要求输出,这一步多加小心。\texttt{cbh} 可是很毒瘤的。

inline void output(polygon x){
    bool fl=0;
    for(auto it:x.x){
        if(!it.second) continue;
        if(it.second>0&&fl) printf("+");
        if(it.second==-1) printf("-");
        if(it.second!=1&&it.second!=-1) printf("%d",it.second);
        if(it.first.x==1) printf("x");
        if(it.first.x>1) printf("x^%d",it.first.x); 
        if(it.first.y==1) printf("y");
        if(it.first.y>1) printf("y^%d",it.first.y); 
        if(it.first.z==1) printf("z");
        if(it.first.z>1) printf("z^%d",it.first.z); 
        fl=1;
    }
    if(x.q){
        if(x.q>0&&fl) printf("+");
        printf("%d",x.q);
        fl=1;
    }
    if(!fl) printf("0");
    return puts(""),void();
}

加试复习最后一题 讨论爆算

2024-01-13 20:43:03 By qx

是否存在正整数组 (x,y,z),使 10(xy+yz+zx)=9xyz 成立?若存在,求出所有正整数组 (x,y,z);若不存在,请说明理由。

\because 10(xy+yz+zx)=9xyz

\therefore 10xy+10yz+10zx=9xyz

\therefore 10 \times \dfrac{1}{x} +10 \times \dfrac{1}{y} +10 \times \dfrac{1}{z} =9

\therefore \dfrac{1}{x}+\dfrac{1}{y}+\dfrac{1}{z}=\dfrac{9}{10}

不妨设 x \leq y \leq z.

\because x,y,z>0

\therefore x,y,z>1

\dfrac{1}{x} \geq \dfrac{1}{y} \geq \dfrac{1}{z}, \dfrac{1}{x} \geq \dfrac{3}{10}.

\therefore x<4.

分类讨论如下:

1^\circ \, x=2: 代入原式,得

\dfrac{1}{2}+\dfrac{1}{y}+\dfrac{1}{z}=\dfrac{9}{10}

\dfrac{1}{y}+\dfrac{1}{z}=\dfrac{2}{5}

\dfrac{1}{y} \geq \dfrac{1}{5}.

\therefore 1 < y \leq 5.

\text{I.} \quad y=2: 代入上式解得 z=-10. (舍)

\text{II.} \quad y=3: 代入上式解得 z=15. (\sqrt{})

\text{III.} \quad y=4: 代入上式解得 z=\dfrac{20}{3}.(舍)

\text{IIII.} \quad y=5: 代入上式解得 z=5.(\sqrt{})

2^\circ \, x=3: 代入原式,得

\dfrac{1}{3}+\dfrac{1}{y}+\dfrac{1}{z}=\dfrac{9}{10}

\dfrac{1}{y}+\dfrac{1}{z}=\dfrac{17}{30}

\dfrac{1}{y} \geq \dfrac{17}{60}

\therefore 3 \leq y<4.y=3: 代入上式解得 z=\dfrac{30}{7}. (舍)

综上所述,(x,y,z)=(2,2,5),(2,5,2),(5,2,2),(2,3,15),(2,15,3),(3,2,15),(3,15,2),(15,2,3),(15,3,2).

problems

2024-01-12 22:27:53 By qx

圆内任取三点其构成三角形覆盖圆心的概率

设三个点分别为 P_1, P_2, P_3.,圆上有 x 个点 .x 理论来说是无限大的,但是因为方便表述,所以使用 x 代替之)

任选三个点,共有 x^3 种方案。

概率为 \dfrac{y}{x^3}。其中 y 表示圆内任取三点其构成三角形覆盖圆心的方案数。

作射线 P_1 OP_2 O. 两条射线与圆周的交点分别为 Q_1,Q_2.

显然,若确定 P_1,P_2 ,则满足题意的点 P_3 一定在 P_1 O\overset{\huge{\frown}}{Q_1 Q_2} 上。(原因不想写,让我写也可以试试看)

如图所示。

图炸了关我啥事

选择 P_3 的方案数是 2 \left[\dfrac{\alpha}{360} \times x \right] .2 \left[ \overset{\huge{\frown}}{Q_1 Q_2} \right]. 对顶角相等,也即 2 \left[\overset{\huge{\frown}}{P_1 P_2} \right].

则总方案数为

\begin{aligned} y & = 2\left[ \sum _{P_1=1} ^x \sum _{P_2=1} ^{\dfrac{x}{2}} \overset{\huge {\frown}}{P_1 P_2} \right]\\ & = 2\left[ \sum _{i=1} ^x \sum _{j=1} ^{\dfrac{x}{2}} j \right] \\ & = 2\left[ \sum _{i=1} ^x \sum _{j=1} ^{\dfrac{x}{2}} j \right] \\ & = 2\left\{ \sum _{i=1} ^x \left[ \dfrac{\frac{x}{2}(\frac{x}{2}+1)}{2} \right] \right\}\\ & = 2x \left[ \dfrac{\frac{x}{2}(\frac{x}{2}+1)}{2} \right] \end{aligned}

这里认为 x 是无穷的,则 y = \dfrac{x^3}{4}.

代入 \dfrac{y}{x^3} ,得到 概率为 \dfrac{\dfrac{x^3}{4}}{x^3}=\frac{1}{4}.

三角函数基础 · 三角函数

2024-01-12 21:41:31 By qx

之前看到彬皓在 T1 的三角函数上面可以获得 100pts 的好成绩,但是我的伪 “三角函数” 的分数只有 70pts. 彬皓和我同为初二学生,他却可以写过去 ,让人佩服。

所以要学习三角函数弥补我在计算几何上面的过失。说实话这东西鸽了很久很久很久了。

发现整个机房就我一个人没了解过向量,将三角函数的时候就我一个人不会。

所以这个东西确实应该补一补。

正好我有一个老掉牙的 \text{geogebra}. 万事俱备只欠东风。

向量及其定义

向量是一种具有方向也具有大小的量。在这里向量的起点为 A ,终点为 B ,那么这个向量可以被表示为 \overrightarrow{AB}. 或者可以用一个小写字母 a 表示,表示为 \vec{a} ,还可以表示为 \bf{a} (这东西为什么不是斜体)

通常认为向量的起点均为原点 O,原点的坐标是 (0,0) ,终点是向量平移到起点和原点重合时的原点。

向量的模

可以简单地理解为向量的长度。设这个向量的终点是 (x,y),那么向量的模长是 \sqrt{ x^2 + y^2 }.

向量 a 的模记作 |a|.

两点 (x_1,y_1),(x_2,y_2) 之间的距离是 \sqrt{(y_1-x_1)^2+(y_2-x_2)^2}. 考虑到向量的起点是原点,所以向量模长可以简单地得到。

后面可以发现向量的模长和绝对值很像,因为有 |-\vec{a}|=|\vec{a}|.

相反向量

-\vec{a} 为向量 \vec{a} 的相反向量。

也就是向量在从原点 \cal{O} 反向延长这个向量的模之后得到的以原点为起点的向量。(顺口编的)

从上面的定义可以推导到:

\vec{a}=(x,y) ,则有 -\vec{a}=(-x,-y). 由定义得,|-\vec{a}|=|\vec{a}|.

向量加和

向量 \vec{a}+\vec{b}.

几何意义:移动 \vec{b} ,使 \vec{b} 的起点与 \vec{a} 的终点相重合,则从原点为起点,以 \vec{b} 为终点的向量是 \vec{a}+\vec{b}.

\vec{a}=(x_1,y_1)\vec{b}=(x_2,y_2) , 则 \vec{a}+\vec{b}=(x_1+x_2,y_1+y_2).

如果这张图炸了那么怪 $\text{geogebra}$

\cal{PS : } 不知道怎么放大字母大小

向量相减:向量 \bf{b} 的加法逆元是 -\bf{b} ,计算 a+(-\bf{b}) 就好了。是至于加法逆元的计算见相反向量。

注意向量的模长之和不与两个向量模长成加和的关系,即

\vec{a}+\vec{b}=\vec{c} ,不一定有 |\vec{a}|+|\vec{b}|=|\vec{c}| 原因还是参见上面的图。

大概是为数不多的允许向量移动。

向量点积

放缩。\lambda \vec{a}.

几何意义:以 \lambda 倍数放缩 \vec{a},得到 \lambda \vec{a}.

\vec{a}=(x,y) , 有 \lambda \vec{a}=(\lambda x,\lambda y).

1^2 + 2^2 + ... + n^2

2023-12-25 13:09:35 By qx

第一类数学归纳法。

证明:

1^2+2^2+\cdots +n^2 = \dfrac{n(n+1)(2n+1)}{6}

一方面,当 n=1 时,1^2=\dfrac{1\times(2\times 1+1)(1+1)}{6}=1 成立。

另一方面,当 n=k 时,

1^2+2^2+\cdots +k^2 = \dfrac{k(2k+1)(k+1)}{6}=\dfrac{2k^3+3k^2+k}{6}

n=k+1 时,

1^2 + 2^2 + \cdots +(k+1)^2 = \dfrac{(k+1)(2k+3)(k+2)}{6}={\dfrac{2k^3+9k^2+13k+6}{6}}

\therefore 1^2+2^2+\cdots +k^2 = \dfrac{2k^3+9k^2+13k+6}{6}-k^2-2k-1

\therefore 1^2+2^2+\cdots +k^2 = \dfrac{2k^3+3k^2+k}{6}

既然证明了命题在 n=1 的条件下成立,也证明了命题在 n=k 的情况下成立时 n=k+1 也成立,则命题成立。


1+2+\cdots + n=\dfrac{n(n+1)}{2}

一方面,当 n=11=\dfrac{1\times 2}{2} 成立。

另一方面,当 n=k 成立时 1+2+\cdots + k = \dfrac{k(k+1)}{2}

n=k+11+2+\cdots +(k+1)=\dfrac{(k+1)(k+2)}{2}

移项可知 1+2+\cdots + k = \dfrac{k(k+1)}{2}

既然证明了命题在 n=1 的条件下成立,也证明了命题在 n=k 的情况下成立时 n=k+1 也成立,则命题成立。

共 7 篇博客