Advertisement
ruhan008

Untitled

Jun 26th, 2023
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. #define endl '\n'
  3. using namespace std;
  4.  
  5. long long binMultiply(long long a,long long b,long long n){
  6.     long long res=0;
  7.     while(b){
  8.         if(b&1) res=(res+a)%n;
  9.         a=(a+a)%n;
  10.         b=b>>1;
  11.     }
  12.     return res;
  13. }
  14. long long binExp(long long a,long long b,long long n){
  15.     long long res=1;
  16.     while(b){
  17.         if(b&1) res=binMultiply(res,a,n);
  18.         a=binMultiply(a,a,n);
  19.         b=b>>1;
  20.     }
  21.     return res;
  22. }
  23.  
  24. bool check_composite(long long a,long long d,long long n,int s){
  25.     long long x=binExp(a,d,n);
  26.     if(x==1||x==n-1) return false;
  27.  
  28.     for(int i=0;i<s-1;i++){
  29.         x=binMultiply(x,x,n);
  30.  
  31.         if(x==n-1) return false;
  32.     }
  33.     return true;
  34. }
  35. bool MillerRabin(long long n,int iter=5){
  36.     if(n<4) return n==3||n==2;
  37.  
  38.     int s=0;
  39.     int d=n-1;
  40.     while((d&1)==0){
  41.         s++;
  42.         d=d>>1;
  43.     }
  44.  
  45.     for(int i=0;i<iter;i++){
  46.         int a=2+rand()%(n-3);
  47.         if(check_composite(a,d,n,s)) return false;
  48.     }
  49.  
  50.     return true;
  51.  
  52.  
  53. }
  54. int main(){
  55.     ios_base::sync_with_stdio(false);
  56.     cin.tie(NULL);
  57.    
  58.     int t;cin>>t;
  59.     while(t--){
  60.         long long n;cin>>n;
  61.         if(MillerRabin(n)) cout<<"YES"<<endl;
  62.         else cout<<"NO"<<endl;
  63.     }
  64.  
  65.     return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement