1622:判断数(快速幂+素数)

Description
给定一个n , 我们把对任意的1<x<n都有 x^n=x(mod n)成立的合数 n 称为good number。现求该数是否为good number。
Input
输入一个数 n (n<1000000)
Output
输出YES或NO
Sample Input
561
21
Sample Output
YES
NO
思路:快速幂运用+素数判断
一直在OLE和RE中来回跳转。。。。
重点还是数组得开大不开小,还有输入不要多写。。想太多系列
附上参考https://blog.csdn.net/ZCMU_2024/article/details/81634556https://www.cnblogs.com/murmured/p/5004067.html两位巨巨,感谢!!

#include<vector>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<algorithm>
#include<stdlib.h>

using namespace std;
typedef long long ll;
const int maxn=1000005;
bool a[maxn];int n;
ll pow(ll a,ll b,ll mod){//快速幂 
    ll sum=1;
    while(b){
        if(b&1) sum=sum*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return sum;
}
int main(){
    memset(a,0,sizeof(a));
    //素数判断 
    for(int i=2;i<=maxn;i++){
            for(int j=i*2;j<=maxn;j+=i)
                a[j]=1;
    }
    //
    while(~scanf("%d",&n))
    {
        bool flag=true;
        if(!a[n]) flag=false;
        if(flag)
            for(ll i=2;i<n;i++)
            {
                ll temp=pow(i,n,n);
                if(temp!=i){
                    flag=false;
                    break;
                }
            }
        
        if(flag)printf("YES\n");
        else printf("NO\n");    
    } 

     return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇文字表述了如何通过规律构造素数。这是素数研究的终极目标。证明很直接,我检查了无数遍认为没错。这篇文章只发到简书...
    好香帅阅读 4,987评论 6 5
  • 什么是素数 素数又称质数,是指大于1的自然数中,除了1和它本身,不能被其它自然数整除的数字。1被定义为非素数。大于...
    程点阅读 7,359评论 1 7
  • 我必须承认,大学里我很少在图书馆里学习过。主要是最开始新图书馆建成之前,老图书馆环境不好,加之座位都被考研的同学占...
    杨一66阅读 485评论 0 0
  • (171109补更) 最近报了个网课,讲的是笔记法。里面说,借助纸质笔记本思考事情,效果很好。昨天我就实践了一下。...
    OJ6Na4QBNcMe18V阅读 177评论 0 0
  • 作者:福慧 你们都不敢异地恋​ 因为你们怕距离怕蚀骨的想念 你们都不敢说再见 因为好害怕说了就再也不见面 你怕他说...
    福至团圆阅读 537评论 2 2