zoukankan      html  css  js  c++  java
  • 米勒素数模板

    知识点:

    1. 快速幂
    2. 米勒素数:

       (1) 随机取一个 a
       (2)如果 它不满足 a^(n-1)%n ==1
       (3)则它一定是 合数
       (4)退出
       (5)如果它满足 a^(n-1)%n ==1
       (6)则它是一个素数的概率是1/2
       (7)回到 (1)

    if n < 2,152,302,898,747, it is enough to test a = 2, 3, 5, 7, and 11

        3.快速幂模:(a*b)%c=(a%c)*(b%c)%c 

    #include <iostream>
    #include <cstdio>
    using namespace std;
    #define N 100
    
    int quickmod(int a,int b,int c)//快速幂模 
    {
    	int ans=1;
    	
    	a=a%c; 
    	while (b)
    	{
    		if (b&1)
    		{
    			ans=ans*a%c;
    		}
    		a=a*a%c;
    		b>>=1;
    	}
    	return ans;
    }
    
    int quick(int a,int b)//快速幂
    {
    	int ans=1;
    	
    	while (b)
    	{
    		if (b&1)
    		{
    			ans=ans*a;
    		}
    		a=a*a;
    		b>>=1;
    	}
    	return ans;
    }
    
    bool miller(int n)
    {
    	int i,s[5]={2,3,5,7,11};
    	
    	for (i=0;i<5;i++)
    	{
    		if (n==s[i])
    		{
    			return true;
    		}
    		if (1!=quickmod(s[i],n-1,n))
    		{
    			return false;
    		}
    	}	
    	return true;
    }
    
    int main()
    {
    	int i,a,b;
    	
    	for (i=2;i<N;i++)
    	{
    		if (miller(i))
    		{
    			printf("%d
    ",i);
    		}
    	} 
    	
    //	while (scanf("%d%d",&a,&b))
    //	{
    //		printf("%lld",quick(a,b));
    //	}
    	
    	return 0;
    }
    
  • 相关阅读:
    每日随笔
    每日随笔
    每日随笔
    JavaSE 类加载机制
    MySQL 索引
    JavaSE 线程的生命周期
    JVM堆内存(heap)详解
    Redis 学习笔记(三)哨兵模式配置高可用和集群
    sqlserver数据库连接数相关问题
    多项式多点求值
  • 原文地址:https://www.cnblogs.com/hemeiwolong/p/8994950.html
Copyright © 2011-2022 走看看