素数与π

关于素数的初步讲解,请戳这儿

本文包含读《隐藏在素数规律中的π》 的学习笔记。


今有结论如下。
若一整数

N = p 1 x 1 p 2 x 2 . . . p a x a N=p_1^{x_1}p_2^{x_2}...p_a^{x_a} N=p1x1p2x2...paxa

则以原点为圆心、 N \sqrt N N 为半径的圆上有格点个数 4 × ( ∏ i = 1 a ( ∑ j = 0 x i χ ( p i j ) ) ) 4\times(\prod_{i=1}^{a}{(\sum_{j=0}^{x_i}{\chi(p_i^j)})}) 4×(i=1a(j=0xiχ(pij)))其中 p p p 是素数,且 ∀ n ∈ Z ∗ \forall n\in\Z^* nZ,有 χ ( n ) = [ n  mod  4 = 1 ] × 1 + [ n  mod 2 = 0 ] × 0 + [ n  mod  4 = 3 ] × ( − 1 ) \begin{aligned}\chi(n)&=[n\text{ mod }4=1]\times1\\ &+[n\text{ mod 2}=0]\times0\\ &+[n\text{ mod }4=3]\times(-1) \end{aligned} χ(n)=[n mod 4=1]×1+[n mod 2=0]×0+[n mod 4=3]×(1)

题目描述 luogu P2508 \text{luogu P2508} luogu P2508

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

Solution 2508 \text{Solution 2508} Solution 2508

此部分视频 17:53 中有详细讲解。附一参考资料

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>

#define reg register
typedef long long ll;

int n,r;
ll ans=1;
bool tf[500010];
int pr[100010];
int sum=0;
int len=0;

void reset(){
	memset(tf,1,sizeof(tf));tf[1]=0;
	for(reg int i=2;i<=n;++i){
		if(!tf[i]) continue;
		pr[++len]=i;
		for(reg int j=i+i;j<=n;j+=i)
			tf[j]=0;
	}
}
int main(){
	scanf("%d",&r);n=sqrt(r);
	reset();
	for(reg int i=1;i<=len;++i){
		sum=0;
		while(r%pr[i]==0){
			r/=pr[i];
			++sum;
		}
		if(pr[i]%4==1) ans*=sum+sum+1;
	}
	if(r>1&&r%4==1) ans*=3;
	printf("%lld",ans*4);
}

最后,推荐一下 lz 蛋疼写的一道数学趣题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值