洛谷P2508

洛谷P2508

题面

[HAOI2008] 圆上的整点

题目描述

求一个给定的圆 ( x 2 + y 2 = r 2 ) (x^2+y^2=r^2) (x2+y2=r2),在圆周上有多少个点的坐标是整数。

输入格式

输入半径 r r r

输出格式

整点个数

样例 #1

样例输入 #1
4
样例输出 #1
4

提示

r ≤ 2000000000 r\leq 2000 000 000 r2000000000

复数回顾

复数为形如 a + b i 的数 ( a , b ∈ R ) , 其中 i 是虚数单位 , 且 i 2 = − 1 复数为形如a+bi的数(a, b \in R), 其中i是虚数单位, 且i^2=-1 复数为形如a+bi的数(a,bR),其中i是虚数单位,i2=1
它在直角坐标系中对应着点P(a, b), 如图:
坐标轴

令: z = a + b i 令:z = a + bi 令:z=a+bi
则: z ˉ = a − b i 则: \bar{z} = a - bi 则:zˉ=abi
我们将 z ˉ 和 z 互称为 我们将\bar{z}和z互称为 我们将zˉz互称为共轭复数
高斯整数: 一个复数的 a , b 均为整数,则称这个数是高斯整数 一个复数的a,b均为整数,则称这个数是高斯整数 一个复数的a,b均为整数,则称这个数是高斯整数
高斯素数: 一个高斯整数不可再拆成两个高斯整数之积,则称这个数是高斯素数 一个高斯整数不可再拆成两个高斯整数之积,则称这个数是高斯素数 一个高斯整数不可再拆成两个高斯整数之积,则称这个数是高斯素数

题目分析

若有一组满足题意的数对 ( x 0 , y 0 ) , 则可以推出的性质 若有一组满足题意的数对(x_0,y_0), 则可以推出的性质 若有一组满足题意的数对(x0,y0),则可以推出的性质
z = x 0 + y 0 i 时 , z ⋅ z ˉ = r 2 z = x_0+y_0i时, z\cdot\bar{z}=r^2 z=x0+y0i,zzˉ=r2
∴ 问题转化成了存在多少个高斯整数,使得 z ⋅ z ˉ = r 2 \therefore 问题转化成了存在多少个高斯整数,使得z\cdot\bar{z}=r^2 问题转化成了存在多少个高斯整数,使得zzˉ=r2
接下来,我们先来计算整数的分解 接下来,我们先来计算整数的分解 接下来,我们先来计算整数的分解

整数的分解因式

若它的a为合数他显然可以分解成两个数的乘积
假设现在将 a 拆成了 p 1 α 1 ⋅ p 2 α 2 … p n α n ( p 1 , p 2 , … , p n ) 假设现在将a拆成了{p_1}^{\alpha _1} \cdot {p_2}^{\alpha _2} \dots {p_n}^{\alpha _n} (p_1, p_2,\dots, p_n) 假设现在将a拆成了p1α1p2α2pnαn(p1,p2,,pn)
若 p i m o d 4 = 1 , 由 若p_imod4=1, 由 pimod4=1, 费马平方数定理: 若质数 p ≡ 1 ( m o d 4 ) 那么 p 可以拆成唯一一组正整数平方和,否则不可拆 若质数p\equiv 1(mod 4) 那么p可以拆成唯一一组正整数平方和,否则不可拆 若质数p1(mod4)那么p可以拆成唯一一组正整数平方和,否则不可拆
∴ a = ( a 1 + b 1 i ) α 1 … ( a k + b k i ) α k ( 模 4 余 1 的质数是一对共轭,其他的都是自己一个 ) \therefore a = (a_1 + b_1i)^{\alpha _1} \dots (a_k + b_ki)^{\alpha _k}(模4余1的质数是一对共轭,其他的都是自己一个) a=(a1+b1i)α1(ak+bki)αk(41的质数是一对共轭,其他的都是自己一个)

最终解答

假设我们已经将 r 2 拆分成了 ( a 1 + b 1 i ) 2 α 1 … ( a k + b k i ) 2 α k 假设我们已经将r^2拆分成了(a_1 + b_1i)^{2\alpha _1} \dots (a_k + b_ki)^{2\alpha _k} 假设我们已经将r2拆分成了(a1+b1i)2α1(ak+bki)2αk
则:我们可以将 ( a j + b j i ) 2 α j 与它共轭的数先平均分在 z 与 z ˉ ( 对模 4 余 1 ) 则:我们可以将(a_j + b_ji)^{2\alpha _j}与它共轭的数先平均分在z与\bar{z}(对模4余1) 则:我们可以将(aj+bji)2αj与它共轭的数先平均分在zzˉ(对模41)
再将每一项互相交换,那么 z 与 z ˉ 还是共轭的 再将每一项互相交换,那么z与\bar{z}还是共轭的 再将每一项互相交换,那么zzˉ还是共轭的
共有 2 α j + 1 中可能 共有2\alpha _j + 1中可能 共有2αj+1中可能
∴ ( x , y ) 共有 r 中模 4 余 1 的质因数此数的平方 + 1 的乘积再乘 4 ( 乘 4 是因为它可以是四个象限中任意一个 ) \therefore (x, y) 共有r中模4余1的质因数此数的平方+1的乘积再乘4(乘4是因为它可以是四个象限中任意一个) (x,y)共有r中模41的质因数此数的平方+1的乘积再乘4(4是因为它可以是四个象限中任意一个)

代码

#include <bits/stdc++.h>
using namespace std;
long long ans = 1; // 初始化乘积
int main()
{
    long long r;
    cin >> r;
    for(long long i = 2; i * i <= r; i++) // 找质因数
    {
        if(n % i == 0) // 找到质因数
        {
            int cnt = 0;
            while(n % i == 0)
            {
                n /= i;
                cnt++;
            }
            if(i % 4 == 1) ans *= cnt * 2 + 1; // 是模4余1类的
        }
    }
    if(n != 1 && n % 4 == 1) ans *= 3; // 如果r本身就是一个模4余1类的
    cout << ans * 4; // 四个象限
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值