poj1248 (线性筛欧拉函数)(原根)
强烈鸣谢wddwjlss
题目大意:给出一个奇素数,求出他的原根的个数,多组数据。
这里先介绍一些基本性质
阶
设\((a,m)=1\),满足\(a^r \equiv 1 \pmod m\)的最小正整数r叫做整数a模m的阶
那么给出一个定理:
设\((a,m)=1\),r为a摸m的阶,则对于每个正整数k,\(a^k \equiv 1 \pmod m\) 当且仅当\(r|k\),特别地,\(r|\phi(m)\)
阶的一些性质
设\((a,m)=1\),r为a摸m的阶,当且仅当二条件成立:
\(a^r \equiv 1 \pmod m\)
对于\(r\) 的每个素因子p有\(a^{r/p} 与1不同余 \pmod m\)
原根
若整数a模m的阶为\(\phi(m)\),则a是模m的原根
对于正整数m,模m具有原根当且仅当\(m=2,4,p^a,2p^a\)其中p是奇素数,且\(a\ge 1\)
判断原根的方法
g是不是模m的原根:
bool check(int g,int m)
{
  for (int i=2;i*i<m;i++)
  {
    if ((m-1)%i==0 && (qsm(g,i,m)==1 || qsm(g,(m-1)/i,m)==1)) return false
  }
  return true;
}
其中\(m为素数\),\(m-1是指\phi(m)\)
运用的是上面的第二个推论
同时!!!!一个很重要的性质
如果\(p\)有原根,则它恰有\(ϕ(ϕ(p))\)个不同的原根(无论\(p\)是否为素数都适用)
那么对于上述的题目
我们要求\(p\)的原根个数,其实就是求\(\phi (p-1)\)
直接线性筛
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
inline int read()
{
  int x=0,f=1;char ch=getchar();
  while (!isdigit(ch)) {if (ch=='-') f=-1;ch=getchar();}
  while (isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
  return x*f;
}
const int maxn = 1e5+1e2;
int check[maxn],prime[maxn],phi[maxn];
int n,m;
int tot;
void init(int n)
{
	check[1]=1;
	phi[1]=1;
	for (int i=2;i<=n;i++)
	{
	   if (!check[i])
	   {
	   	  prime[++tot]=i;
	   	  phi[i]=i-1;
	   }
	   for (int j=1;j<=tot;j++)
	   {
	   	if (i*prime[j]>n) break;
	   	check[i*prime[j]]=1;
	   	if (i%prime[j]==0)
	   	{
	   		phi[i*prime[j]]=phi[i]*prime[j];
	   		break;
		}
		else
		{
			phi[i*prime[j]]=phi[i]*(prime[j]-1);
		}
	   }
	}
}
int main()
{
  init(100000);
  while (scanf("%d",&n)!=EOF)
  {
  	printf("%d\n",phi[n-1]);
  }
  return 0;
}
poj1248 (线性筛欧拉函数)(原根)的更多相关文章
- The Euler function(线性筛欧拉函数)
		/* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ... 
- 素数的线性筛 && 欧拉函数
		O(n) 筛选素数 #include<bits/stdc++.h> using namespace std; const int M = 1e6 + 10 ; int mindiv[M] ... 
- [bzoj 2190][SDOI2008]仪仗队(线性筛欧拉函数)
		题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 分析:就是要线性筛出欧拉函数... 直接贴代码了: memset(ans,,sizeof ... 
- 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和
		只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ... 
- BZOJ 2190 仪仗队(线性筛欧拉函数)
		简化题意可知,实际上题目求得是gcd(i,j)=1(i,j<=n)的数对数目. 线性筛出n大小的欧拉表,求和*2+1即可.需要特判1. # include <cstdio> # in ... 
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑  乘法逆元,线性筛,欧拉函数,数论
		2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2560 Solved: 857[Submit][St ... 
- poj1284:欧拉函数+原根
		何为原根?由费马小定理可知 如果a于p互质 则有a^(p-1)≡1(mod p)对于任意的a是不是一定要到p-1次幂才会出现上述情况呢?显然不是,当第一次出现a^k≡1(mod p)时, 记为ep(a ... 
- noip复习——线性筛(欧拉筛)
		整数的唯一分解定理: \(\forall A\in \mathbb {N} ,\,A>1\quad \exists \prod\limits _{i=1}^{s}p_{i}^{a_{i}}=A\ ... 
- BZOJ 2818 GCD 素数筛+欧拉函数+前缀和
		题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=n且Gcd(x,y)为素数的数对( ... 
随机推荐
- mybatis相关函数
			MyBatis中的if....else...表示方法 <choose> <when test=""> //... </when> <oth ... 
- @RequestParam注解的详细介绍
			@RequestParam (org.springframework.web.bind.annotation.RequestParam)用于将指定的请求参数赋值给方法中的形参. 有三个属性: (1)v ... 
- UOS LoongArch 上成功安装.NET Core 3.1
			龙芯.NET团队正式发布了.NET Core 3.1 For LoongArch, 具体参见龙芯开源网站 http://www.loongnix.cn/index.php/Dotnet . 进入安装包 ... 
- dotnet C# 给结构体字段赋值非线程安全
			在 dotnet 运行时中,给引用对象进行赋值替换的时候,是线程安全的.给结构体对象赋值,如果此结构体是某个类的成员字段,那么此赋值不一定是线程安全的.是否线程安全,取决于结构体的大小,取决于此结构体 ... 
- 使用 Dockerfile 自定义 Nginx 镜像
			一般来说,自定义Nginx只需要把静态文件放到镜像里就可以了,不需要重写 CMD 与 ENTRYPOINT.但是,如果的确需要在 Nginx 启动前执行一些操作,就需要重写 CMD 了,如果写成下边就 ... 
- 循环神经网络LSTM RNN回归:sin曲线预测
			摘要:本篇文章将分享循环神经网络LSTM RNN如何实现回归预测. 本文分享自华为云社区<[Python人工智能] 十四.循环神经网络LSTM RNN回归案例之sin曲线预测 丨[百变AI秀]& ... 
- Mysql常用sql语句(15)- cross join 交叉连接
			测试必备的Mysql常用sql语句 https://www.cnblogs.com/poloyy/category/1683347.html 前言 交叉连接就是求多表之间的笛卡尔积 讲道理..这个我都 ... 
- 判断页面是在pc端还是移动端打开不同的页面
			在pc端页面上的判断 var mobileAgent = new Array("iphone", "ipod", "ipad", " ... 
- NLP与深度学习(四)Transformer模型
			1. Transformer模型 在Attention机制被提出后的第3年,2017年又有一篇影响力巨大的论文由Google提出,它就是著名的Attention Is All You Need[1]. ... 
- freeswitch python模块
			概述 freeswitch支持多种语言的业务开发,包括C/C++,java,python,js,lua,Golang等等.freeswitch在使用python做业务开发时,有俩种接入方式,一种是ES ... 
