zoukankan      html  css  js  c++  java
  • miller——rabin

    突然发现自己在线性筛素数中有这个,忘了好久;

    #include<iostream> 
    #include<cstdio>
    using namespace std;
    long long num[10]={0,2,3,5,7,11,13,17,19};
    long long mul(long long a,long long b,long long p)
    {
    	long long ans=1;
    	a=a%p;
    	while(b)
    	{
    		if(b&1)
    			ans=(ans*a)%p;
    		b>>=1;
    		a=(a*a)%p;
    	}
    	return ans;
    }
    bool test(long long a)
    {
    	if(a==2)
    		return true;
    	if(a%2==0||a==1)
    		return false;
    	for(int i=1;i<=8;i++) 
    		if(a==num[i])
    			return true;
    	long long t=0,temp=a-1,now;
    	while((temp&1)==0)
    	{
    		temp>>=1;
    		t+=1;
    	}
    	for(int i=1;i<=8;i++) 
    	{
    		now=mul(num[i],temp,a);
    		long long nxt=now;
    		for(int i=1;i<=t;i++)
    		{
    			nxt=(now*now)%a;
    			if(nxt==1&&now!=1&&now!=a-1)
    				return false;
    			now=nxt;
    		}
    		if(now!=1)
    			return false;
    	}
    	return true;
    }
    int main()
    {
    	long long n,m;
    	scanf("%lld%lld",&n,&m);
    	long long pass;
    	for(int i=1;i<=m;i++)
    	{
    		scanf("%lld",&pass);
    		if(test(pass))
    			printf("Yes
    ");
    		else
    			printf("No
    ");
    	}
    }
    
  • 相关阅读:
    POJ 2503 Babelfish
    POJ 1182 食物链
    POJ 2352 Stars
    POJ 2528 Mayor's posters
    POJ 1328 Radar Installation
    POJ 1017 Packets
    jQuery实现登录提示
    【1-5】jQuery对象和DOM对象
    【1-4】jQuery代码风格-导航栏
    【3】买苹果
  • 原文地址:https://www.cnblogs.com/Lance1ot/p/8970358.html
Copyright © 2011-2022 走看看