qx的博客

博客

扩域

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

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

定义新的虚数单位 $i,i=\sqrt{5}.$

对于 $fib$ 数列的通项公式:

$$F_n = \dfrac{1}{\sqrt{5}}\left[\left(\dfrac{1+\sqrt{5}}{2}\right)^n-\left(\dfrac{1-\sqrt{5}}{2}\right)^n\right]$$

将 $\sqrt{5}$ 视作虚数单位。原式可化为:

$$F_n = \dfrac{1}{i}\left[\left(\dfrac{1+i}{2}\right)^n-\left(\dfrac{1-i}{2}\right)^n\right]$$

需要注意: $i^2 = \sqrt{5}^2 = 5.$

$zz'=(a+bi)(c+di)=ac+(ad+bc)i+bdi^2=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=x^3 + y^3+ z^3-3xyz$ ,则称 $n$ 具有性质 $P$,在 $1, 5, 2013, 2024$ 中,那些数具有性质 $P$,那些数不具有性质 $P$?请说明理由。

题外话

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

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

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

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

解:

原式

$= (x+y+z)(x^2+y^2+z^2-xy-zx-zy)$

$=(x+y+z)[(x^2+y^2+z^2+2xy+2xz+2yz)-3xy-3xz-3yz]$

$=(x+y+z)[(x+y+z)^2-3(xy-xz-yz)]$

令 $a=x+y+z, b=xy-xz-yz.$

则 $a,b$ 均为整数。

原式 $=a(a^2-3b)$

$\because 2013=3 \times 11 \times 61$

$\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$。

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

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

$2024$ 在 $x=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^2$ 而 $3b$ 由于 $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 O$,$P_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}.$

qx Avatar