timus 1268 原根

题意:求K个素数pi对应的ni。ni满足:ni,ni^2,ni^3,...,ni^m对pi取模各不相同(i=1,2,3,...),且m最大,ni最大。

理论基础: 原根的定义:首先,对于互质的两个整数a,m。必然存在:d<=m-1,使得:a^d=1(mod m),比如说:d=phi(m)。我们定义a对m的阶为所有满足a^d=1(mod m)的d中最小的一个正整数。如此一来,如果a对m的阶为phi(m),那么我们称a为m一个原根。

     原根性质定理:如果a为m的原根,记它的阶为ord,那么:a,a^2,a^3,...,a^ord对m取模的值各不相同。

     定理1:对于整数a,与素数m,则a,a^m对m取模的结果相同(费马小定理)。

     定理2:可以证明,如果正整数(a,m)=1和正整数 d 满足a^d=1(mod m),则ord整除d。

定理:如果p为素数,那么素数p一定存在原根,并且p的原根的个数为phi(p-1).

设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.

假设一个数g对于P来说是原根,那么g^i mod P的结果两两不同,且有 1<g<P, 0<i<P,那么g可以称为是P的一个原根,归根到底就是g^(P-1) = 1 (mod P)当且

仅当指数为P-1的时候成立.(这里P是素数).

求原根目前的做法只能是从2开始枚举,然后暴力判断g^(P-1) = 1 (mod P)是否当且当指数为P-1的时候成立。而由于原根一般都不大,所以可以暴力得到.

 

求一个奇素数的所有原根方法。

设g是P的平方非剩余,是P-1的标准分解式,若恒有成立,

则g就是P的原根。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define maxn 70000
bool isprime[maxn];
int prime[maxn],nprime;
void getprime()
{
    long long i,j;
    memset(isprime,1,sizeof(isprime));
    nprime=0;
    for(i=2; i<maxn; i++)
        if(isprime[i])
        {
            prime[nprime++]=i;
            for(j=i*i; j<maxn; j+=i)isprime[j]=0;
        }
}
long long exp_mod(long long a,long long  b,long long c)
{
    a%=c;
    long long ans=1;
    while(b)
    {
        if(b&1)ans=ans*a%c;
        b>>=1,a=a*a%c;
    }
    return ans;
}
bool judge(int yl,int n)
{
    int x=n-1;
    for(int i=0; prime[i]<=x; i++)
        if(x%prime[i]==0)
            if(exp_mod(yl,x/prime[i],n)==1)
                return 0;
    return 1;
}
int main()
{
    int t,n;
    getprime();
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=n-1; i>0; i--)
            if(judge(i,n))
            {
                printf("%d\n",i);
                break;
            }
    }
    return 0;
}
时间: 2024-09-17 04:35:49

timus 1268 原根的相关文章

Timus 1446. Sorting Hat 分类问题

At the start of each school year, a very important event happens at Hogwarts. Each of the first-year wizards and witches is assigned to one of the four Hogwarts houses. The bravest children are put to Gryffindor, the cleverest are put to Ravenclaw, t

修改build-gnuradio免翻墙免炖github本地安装

1.将VMWare镜像中的~/sdr/ 复制到你的linux中 2.将以下文本替换掉build-gnuradio里的内容,没错 echo 'simpower91 modified here' echo 'Do you want to skip downloading from the internet?[yes]' read simskip if [ "$simskip"a = 'no'a ] then gitfetch fi echo 'simpower91 modified end

五大关键词测试你的seo能力

学seo做seo已经快大半年了,时至春节也没多少心情研究seo技术,就潜下心想想自己这半年在seo上有多少长进,学习到了哪些知识,做出了哪些成绩,对未来有什么展望.在我仔细分析过后,我觉得如果要把seo当做终生职业,要成为seo大牛,下面五大关键词映射的能力是我们必须做到的.文章观点或有逻辑不严谨之处,权当抛砖引玉,欢迎大家交流. 一.seo执行力 我入门seo看到的第一句话是当初看见seowhy夫唯的一句话,这句话的大概意思就是讲seo执行的.做了大半年,关于seo执行力这点我已经感受良多.不

Ural

Let's consider K-based numbers, containing exactly N digits. We define a number to be valid if itsK-based notation doesn't contain two successive zeros. For example: 1010230 is a valid 7-digit number; 1000198 is not a valid number; 0001235 is not a 7

如何解决setInterval计时器不准的问题

在js中如果打算使用setInterval进行倒数,计时等功能,往往是不准确的,因为setInterval的回调函数并不是到时后立即执行,而是等系统计算资源空闲下来后才会执行.而下一次触发时间则是在setInterval回调函数执行完毕之后才开始计时,所以如果setInterval内执行的计算过于耗时,或者有其他耗时任务在执行,setInterval的计时会越来越不准,延迟很厉害. 下面的代码可以说明这个问题 var startTime = new Date().getTime(); var c

AIX性能监控:CPU瓶颈分析

CPU 瓶颈 ------------------- 下面我们将就如何使用命令vmstat.tprof和ps检查系统是否存在CPU瓶颈做一个简单介绍. 1. vmstat 使用命令 # vmstat 1 10 P650A:/#vmstat 1 10 System configuration: lcpu=16 mem=15744MB kthr    memory              page              faults        cpu   ----- -----------

浅谈Microsoft C#编译器和Mono C#编译器

我在2009年4月19日写的一篇随笔"Timus 1037. Memory management"中,使用了如下的一个结构(Structs)来表示"内存块": struct Block { public int Id { get; private set; } public int Time { get; set; } public Block(int id, int time) : this() { Id = id; Time = time; } } 在这个结构中

【算法】利用有限自动机进行字符串匹配

Timus 1102. Strange Dialog 要求判断给定的输入是否为合法的对话. 1102. Strange Dialog Time Limit: 1.0 second Memory Limit: 16 MB One entity named "one" tells with his friend "puton" and their conversation is interesting. "One" can say words &qu

POJ 2606 / URAL 1502 Rabbit hunt:计算几何

1052. Rabbit Hunt http://poj.org/problem?id=2606 http://acm.timus.ru/problem.aspx?space=1&num=1052 Time limit: 1.0 second Memory limit: 64 MB A good hunter kills two rabbits with one shot. Of course, it can be easily done since for any two points we