求原根_模12的原根

求原根_模12的原根今天学了数论。。。求原根真的好暴力设模数为p我们把p−1p−1p-1分解质因数,对于每一个2≤i≤p−12≤i≤p−12\leqi\leqp-1,判断an−1pi%pan−1pi%pa^{n-1\overp_i}\%p是否为1,如果是,那么这个数就不是原根,否则就是ACCode#include<cstdio>#include<iostre

今天学了数论。。。求原根真的好暴力
设模数为p,
我们把 p − 1 p-1 p−1分解质因数, p 1 , p 2 … p m p_1,p_2 \ldots p_m p1​,p2​…pm​对于每一个 2 ≤ i ≤ p − 1 2 \leq i \leq p-1 2≤i≤p−1 ,判断 i p − 1 p j % p i^{p-1 \over p_j} \%p ipj​p−1​%p是否为1,如果是,那么这个数就不是原根,否则就是
AC Code

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int zys[50];
int p;
int o;
int n;
int ksm(int a,int c,int b)
{ 
   
	long long re=1;
	long long t=a;
	while(c)
	{ 
   
		if(c&1)re=re%b*t%b;
		t=t%b*t%b;
		c>>=1;
	}
	return re;
}
int pd(int x)
{ 
   
	for(int i=1;i<=o;i++)
	{ 
   
		if(ksm(x,(p-1)/zys[i],p)%p==1)return 0;
	}
	return 1;
}
int main()
{ 
   
	scanf("%d",&p);
	int pp=p;
	p--;
	for(int i=2;i<=sqrt(p);i++)
	{ 
   
		if(p==1)break;
		if(p%i==0)
		{ 
   
			o++;
			zys[o]=i;
			while(p%i==0)
			{ 
   
				p/=i;
			}
		}
	}
	if(p!=1)
	{ 
   
		o++;
		zys[o]=p;
	}
	p=pp;
	for(int i=2;i<p;i++)
	{ 
   
		if(pd(i))
		{ 
   
			printf("%d",i);
			break;
		}
	}	
	return 0;
} 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215435.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微博第三方登录时,域名使用错误报错, Laravel \ Socialite \ Two \ InvalidStateException No message…

    微博第三方登录时,域名使用错误报错, Laravel \ Socialite \ Two \ InvalidStateException No message…

    2021年10月25日
  • vlan的作用和特点_VLAN的概念

    vlan的作用和特点_VLAN的概念VLAN它的全称是虚拟局域网,作用就是把连接在同一交换机下的主机分为更小的逻辑网段,以减少广播的数量,不同的VLAN之间不能通讯,这样广播就被限制在同一个业务需求主机的VLAN里,即便是连接在同一个交换机下,不同的VLAN也不会收到广播的ARP请求!如果他们之间需要通讯,只能借助路由器或三层交换机没有携带VLAN(Tag)的数据帧携带VLAN(Tag)的数据帧标签类型把同一物理局域网内的不同用户逻辑地划分成不同的广播域、有助于控制流量、减少设备投资、简化网络管理。提高网络的安全性。1)区段化:将一个网络

    2022年8月10日
  • django views_django admin视图

    django views_django admin视图前言ViewSet只是一种基于类的视图,它不提供任何方法处理程序(如.get()或.post()),而是提供诸如.list()和.create()之类的操作。ViewSet的方法处理程序

    2022年7月31日
  • hackbar工具安装使用教程

    hackbar工具安装使用教程HackBar工具介绍HackBar是一个浏览器上的一个插件,包含一些黑客常用的工具,比如SQLinjection,XSS,加密等!免费版下载百度网盘:https://pan.baidu.com/s/1WBT6iqx9ZRSbCRbGWUfvvA提取码:1234免费版安装:按F12打开hackbar界面…

    2022年6月14日
  • openssl安装与使用

    文章目录1、OpenSSL简介2、OpenSSL安装3、加密技术介绍4、openssl命令4.1摘要命令4.2、对称加密命令4.3非对称加密命令4.3.1生成私钥4.3.2提取公钥4.3.3利用公私钥加密、解密数据4.3.4数字签名4.3.5数字证书1、OpenSSL简介OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux、Windows、MacOS等多种平台。  OpenSSL最早的版本在1995年发布,1998年后开始由OpenS

    2022年4月6日
  • 永磁同步电机矢量控制(二)——控制原理与坐标变换推导

    永磁同步电机矢量控制(二)——控制原理与坐标变换推导永磁同步电机控制原理矢量控制框图如下图所示:矢量控制的原理是在永磁同步电机上设法模拟直流电动机的转矩控制规律,经过坐标变换,使其电流矢量分解为产生磁通的电流分量和产生转矩的电流分量,两个分量互相垂直,相互独立。这样就可以对它们进行单独调节,与直流电动机的双闭环控制系统类似。(双闭环控制系统在陈伯时电力拖动控制书的2.4章节有详细的介绍,有需要的可以回顾一下。大三学的现在基……………

    2022年9月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号