1、C++打表方式如下
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream outfile("out.txt");
streambuf *streams=cout.rdbuf();//保存原来的cout对象
cout.rdbuf(outfile.rdbuf());
cout<<"打表正确哈哈"<<endl;
cout.rdbuf(streams);//恢复对象 保存和恢复必须成对出现不然会出现错误
cout<<"恢复正常!"<<endl;
return 0;
}
2、筛选打表
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <fstream>
using namespace std;
#define N 5000001
bool isprime[N];
int prime[N];
void dopprime()//埃拉托斯尼斯筛法,这个完全可以作为一个模版
{
long long i,j;
memset(isprime,true,sizeof(isprime));
int cnt=0;
isprime[1]=0;
for( i=2;i<N;i++)
{
if(isprime[i])
{
prime[++cnt]=i;
for(j=i*i;j<N;j+=i)
isprime[j]=false;
}
}
}
bool ifprime(long long x)//一般判素数法
{
int k=(int)sqrt(double(x));
for(int i=1;prime[i]<=k;i++)
if(x%prime[i]==0)
return 0;
return 1;
}
bool ok1(int a)//判断回环
{
int b = 0 , c = a;
while(a)
{
b = b * 10 + a % 10;
a /= 10;
}
return b == c;
}
int main()
{
dopprime();
ofstream outfile("prime_table.txt");
streambuf *streams=cout.rdbuf();
cout.rdbuf(outfile.rdbuf());//重定向到outfile
int a,b,i;
cin>>a>>b;
for(i=a;i<b+1;i++)
{
if(ifprime(i)==true&&ok1(i)==true) cout<<i<<",";
}
cout.rdbuf(streams);//恢复正常
return 0;
}