参见:
http://www.cnblogs.com/Mathics/p/4028819.html
#include<bits/stdc++.h>
using namespace std;
long long pow_mod(long long base,long long power,long long mod)
{
// cout<<base<<endl;
if(power==0) return 1;
if(power==1) return base;
if(power%2) return pow_mod(base*base%mod,power>>1,mod)*base%mod;
else return pow_mod(base*base%mod,power>>1,mod);
}
bool l_m_test(long long base,long long num)
{
long long d=num-1;
while(!(d&1)) d/=2;
if(pow_mod(base,d,num)==1||pow_mod(base,d,num)==num-1) return true;
long long t=(num-1)/2;
while(d!=t)
{
d*=2;
if(pow_mod(base,d,num)==num-1) return true;
}
return false;
}
int main()
{
for(int i=2;i<102;i++)
{
if(((i&1)!=0)&&(i%3!=0)&&(i>2)&&l_m_test(2,i)&&((i<=7)||l_m_test(7,i))&&((i<=61)||l_m_test(61,i))||(i==2)||(i==3))
cout<<i<<endl;
}
}