1 solutions

  • 0
    @ 2023-2-7 17:23:52

    这个题就是模板题哒,就像背景中写的那样。

    先判断p是否是素数,如果不是的话,再用快速幂计算a^p(modp)的值是否为a就行。代码如下:

    #include<iostream>
    #include<math.h>
    using namespace std;
    
    long long Gpow(long long a,long long b,long long mod)//快速幂计算
    {
    	long long r=1;
    	while (b!=0)
    	{
    		if (b%2==1)
    		{
    			r=((r%mod)*(a%mod))%mod;
    		}
    			a=((a%mod)*(a%mod))%mod;
    			b/=2;
    	}
    	return r;
     } 
    int isprime(long long s)//判断素数
    {
    	if (s==1)
    	{
    		return 0;
    	}
    	if (s==2)
    	{
    		return 1;
    	}
    	for (long long i=2;i<=sqrt(s);i++)
    	{
    		if (s%i==0)
    		{
    			return 0;
    		}
    	}
    	return 1;
    }
    
    int main()
    {
    	int T;
    	cin>>T;
    	while(T--)
    	{
    		long long p,a;
    		cin>>p>>a;
    		int ans1;
    		ans1=isprime(p);
    		if (ans1==1)
    		{
    			cout<<"no"<<endl;
    			continue;
    		}
    		long long ans2=Gpow(a,p,p);
    		if (ans2==a)
    		{
    			cout<<"yes"<<endl;
    		}
    		else
    		{
    			cout<<"no"<<endl;
    		}
    	}
    	return 0;
    }
    

    Information

    ID
    6690
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    (None)
    # Submissions
    58
    Accepted
    23
    Uploaded By