码迷,mamicode.com
首页 > 其他好文 > 详细

fft质数打表程序

时间:2016-06-12 20:05:54      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void foo(ll x){
	int flag=0;
	for(ll i=2;i*i<=x;++i)
		if(x%i==0){
			int j=0;
			for(;x%i==0;x/=i)
				++j;
			if(flag++)
				cout<<"*";
			cout<<i;
			if(j!=1)
				cout<<"^"<<j;
		}
	if(x!=1){
		if(flag)
			cout<<"*";
		cout<<x;
	}
	cout<<endl;
}
bool bar(ll x){
	for(ll i=2;i*i<=x;++i)
		if(x%i==0)
			return 0;
	return 1;
}
ll pow(ll u,ll v,ll p){
	ll a=1;
	for(;v;v>>=1){
		if(v&1)
			a=a*u%p;
		u=u*u%p;
	}
	return a;
}
ll root(ll d,ll q){
	ll k=0,a[16];
	for(ll i=2,j=d;;++i){
		if(j%i==0){
			a[k++]=i;
			while(j%i==0)
				j/=i;
		}
		if(j<i*i){
			if(j!=1)
				a[k++]=j;
			break;
		}
	}
	for(ll i=2;;++i){
		ll j=0;
		for(;j!=k&&pow(i,
		d/a[j],q)!=1;++j);
		if(j==k)
			return i;
	}
}
int m;ll x,v[10000];
int main(){
	for(int j=17;j<30;++j)
		for(ll i=1;
		(x=i*(1<<j)+1)<1e8;++i)
			if(i%2&&bar(x))
				v[m++]=x;
	sort(v,v+m);
	for(int i=0;i!=m;++i){
		cout<<setw(8)<<v[i]
		<<setw(4)
		<<root(v[i]-1,v[i]);
		int j=0;
		for(--v[i];v[i]%2==0;++j)
			v[i]/=2;
		cout<<setw(4)<<"2^"
		<<j<<" * "
		<<setw(5)<<v[i]<<endl;
	}
}

  

fft质数打表程序

标签:

原文地址:http://www.cnblogs.com/f321dd/p/5578527.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!