在错误信息里输出N以内的素数
2006-04-17 14:41
274 查看
以前在MCD上听说过,又见过几个讨论,忘了在哪里,也没弄清楚怎么实现的,今天中午试了一下,居然成功了,高兴ing!贴出来,与大家分享:
(VS.NET 2005)
template<long M,long N>struct CanDivid //whether N can be divided by (2 to M)
{
enum{Result = (N % M == 0 || CanDivid<M - 1,N>::Result)};
};
template<long N>struct CanDivid<2,N>
{
enum{Result = (N % 2 == 0)};
};
template<long N>struct CanDivid<1,N>
{
enum{Result = 0};
};
template<long N>struct CanDivid<0,N>
{
enum{Result = 0};
};
template<long N>struct Prime
{ //whether N is a prime number
enum{IsPrime = !CanDivid<N / 2,N>::Result};
Prime();
};
template<bool R,class T1,class T2>struct Selector //type selector
{
typedef T1 RType;
};
template<class T1,class T2>struct Selector<false,T1,T2>
{
typedef T2 RType;
};
template<long N>struct Generate:public Generate<N-1>
{
typedef typename Selector<Prime<N>::IsPrime,Prime<N>,int>::RType RType;
Generate(){
RType();
}
};
template<>struct Generate<2>
{
Generate(){
Prime<2>();
}
};
int main(){
Generate<100>(); //generate prime numbers from 2 to 100 in Error Message
}
作用:在错误信息里输出100以内的素数。
(VS.NET 2005)
template<long M,long N>struct CanDivid //whether N can be divided by (2 to M)
{
enum{Result = (N % M == 0 || CanDivid<M - 1,N>::Result)};
};
template<long N>struct CanDivid<2,N>
{
enum{Result = (N % 2 == 0)};
};
template<long N>struct CanDivid<1,N>
{
enum{Result = 0};
};
template<long N>struct CanDivid<0,N>
{
enum{Result = 0};
};
template<long N>struct Prime
{ //whether N is a prime number
enum{IsPrime = !CanDivid<N / 2,N>::Result};
Prime();
};
template<bool R,class T1,class T2>struct Selector //type selector
{
typedef T1 RType;
};
template<class T1,class T2>struct Selector<false,T1,T2>
{
typedef T2 RType;
};
template<long N>struct Generate:public Generate<N-1>
{
typedef typename Selector<Prime<N>::IsPrime,Prime<N>,int>::RType RType;
Generate(){
RType();
}
};
template<>struct Generate<2>
{
Generate(){
Prime<2>();
}
};
int main(){
Generate<100>(); //generate prime numbers from 2 to 100 in Error Message
}
作用:在错误信息里输出100以内的素数。
相关文章推荐
- 输出10000以内的第M到第N个素数(Eclipse gcc下)
- linux 输出正确或错误信息到文件 1> 或 2>>
- 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\41c191fd\ff9345c5\App_Web_login.cshtml.65793277
- 输出一百以内的全部素数
- 十一周——输出1000以内全部素数
- 编译器错误信息: CS0016: 未能写入输出文件“c:/WINDOWS/Microsoft.NET/Framework/
- 编译器错误信息: CS0016: 未能写入输出文件,..\Temporary ASP.NET Files\WebApp\d087da43\c12930d8\9ze28k_8.dll”--拒绝访问
- PS Studio调用.exe输出错误信息的解决办法
- 编程输出100以内的素数
- 使用命令将logcat中的内容输出到文本文件中(防止滑屏看不到错误信息)
- 编译器错误信息: CS0016: 未能写入输出文件 解决方法
- 第十一周 项目六:输出1000以内的所有素数
- 第十一周 项目六:输出1000以内的所有回文素数
- php 输出错误信息及设置错误级别
- 编译器错误信息: CS0016: 未能写入输出文件 解决方法
- 学习笔记6-Android查看应用输出的错误信息 如何部署应用到真实手机 发布软件
- 第十一周项目6.4.1输出1000以内的素数
- 第十一周项目6 (4)输入一个数,输出这个数以内的所有回文素数
- “编译器错误信息: CS0016: 未能写入输出文件”解决方法