zoukankan      html  css  js  c++  java
  • FFT质数打表程序

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    void sol(ll x){
        int y=0;
        for(ll i=2;i*i<=x;++i)
            if(x%i==0){
                int j=0;
                for(;x%i==0;x/=i)++j;
                if(y++)cout<<"*";
                cout<<i;
                if(j!=1)cout<<"^"<<j;
            }
        if(x!=1){
            if(y)cout<<"*";
            cout<<x;
        }
        cout<<endl;
    }
    bool jud(ll x){
        for(ll i=2;i*i<=x;++i)
            if(x%i==0)return 0;
        return 1;
    }
    ll wop(ll s,ll n,ll p){
    	ll t=1;
    	for(;n;n>>=1){
    		if(n&1)t=t*s%p;
    		if(n>1)s=s*s%p;
    	}
    	return t;
    }
    ll phi(ll x){
    	ll s=x;
    	for(ll i=2;i*i<=x;++i)
    		if(x%i==0){
    			while(x%i==0)x/=i;
    			s=s/i*(i-1);
    		}
    	if(x!=1)s=s/x*(x-1);
    	return s;
    }
    ll gen(ll p){
    	static ll c[16];
    	ll s=phi(p),x=s;
    	int k=0;
    	for(ll i=2;i*i<=x;++i)
    		if(x%i==0){
    			while(x%i==0)x/=i;
    			c[k++]=i;
    		}
    	if(x!=1)c[k++]=x;
    	for(ll i=2;;++i){
    		int j=0;
    		while(j!=k&&wop(i,s/c[j],p)!=1)
    			++j;
    		if(j==k)return i;
    	}
    }
    void out(ll p){
        int j=__builtin_ctzll(p-1);
        cout<<setw(8)<<p;
        cout<<setw(4)<<gen(p);
        cout<<"  2^"<<j;
        cout<<" * "<<setw(5)<<(p-1>>j);
        cout<<endl;
    }
    int main(){
    	for(ll i=1;;++i){
    		ll j=(i<<20)+1;
    		if(j>2e9)break;
    		if(jud(j))out(j);
    	}
    }
    
  • 相关阅读:
    NOI2018:屠龙勇士
    Hello world!
    bzoj5月月赛订正
    codeforces906 D
    bzoj2728 [HNOI2012]与非
    bzoj3884上帝与集合的正确用法
    bzoj2817[ZJOI2012]波浪
    2017多校联合赛1[题解]
    论如何优雅的用bitset来求四维偏序
    bzoj1488[HNOI2009]图的同构
  • 原文地址:https://www.cnblogs.com/f321dd/p/factorization.html
Copyright © 2011-2022 走看看