终极外挂输入法

/***
 * @author ljj@nubix.cn
 * 缓存不是越大越快,也不是越小越快
 */
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

//默认1M缓存
#define MAX_LINE 1*1024*1024
char __line[MAX_LINE+1];
char *p = NULL;
char tab[257] = {-1};

inline char * _(){
	static int k = 0;
	if(k == 0){
		memset(tab,-1,sizeof(tab));
		for(int i=0;i<10;tab['0'+i]=i,i++);
		tab['-'] = tab['+'] = +1;
		k++;	
	}
	k = fread(__line,1,MAX_LINE,stdin);
	if(k <= 0)
		__line[0] = 1; //hack..
	else
		__line[k] = 0;
	return p = __line;
}

/***
  * 假设输入绝对正确
  * @return 0 || 1
  */
inline int nextInt(int &r){

	r = 0;
	int m = 0;

	for(p && *p && *p!=1 ? 0:_();p;_()){
		for(;*p && *p!=1 && tab[*p] < 0;p++)if(m != 0){r = r * m; p++; return 1;}

		if(*p != 1){
		if(*p){
			for((*p-'-') ? ((*p-'+') ? (m=1,p) : (m=1,p++)):(m=-1,r=0,p++);*p && tab[*p]>=0;p++) 
				if(tab[*p]>=0) r = r * 10 + tab[*p];
			
			if(*p != 0 && m != 0 ){r = r * m;return 1;}
		}}
		if(*p!=0 && *p!=1 && m != 0){r = r * m;return 1;}
		if(*p == 1)break;
	}
	return 0;
}

int q[1000000];

int main(int argc, char *argv[])
{
    memset(q,0,sizeof(q));

    int num = 0;

    for(int i=2;i<1000000;i++)if(q[i] == 0){
        num++;
        for(int j=i;j<1000000;j+=i)
            q[j] = num;
    }

    while(nextInt(num)){
        printf("%d\n",q[num]);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值