neerc 2010 codeforces gym 101409B MR32 挂板子

这题只需要分段打表,段内在暴力判断一下就好啦,主要在于挂个板子,在打表的时候由于题目要求的素数数量级大概在1e7左右,所以当MR32发现有的时候,再暴力判断一下,防止MR32误判。半小时能出结果。

#include <bits/stdc++.h>
using namespace std;
const int num[10001]={0,22201,39989,56533,72054,87397,102120,116708,130945,145160,158928,172610,186209,199529,212843,226042,239090,252077,265059,277609,290333,302776,315369,327763,340234,352709,365000,377378,389554,401703,413896,425841,437819,449672,461687,473494,485279,496983,508772,520737,532485,544097,555677,567312,578821,590279,601957,613461,624894,636269,647822,659209,670514,681796,693171,704455,715762,727048,738255,749370,760569,771753,782707,793836,805001,816035,827040,838028,849201,860266,871116,882088,893110,904067,914898,925706,936570,947342,958056,968704,979506,990325,1001150,1011931,1022728,1033404,1044135,1054729,1065482,1076182,1086736,1097505,1108057,1118607,1129131,1139817,1150487,1161016,1171572,1181936,1192517,1203108,1213664,1224175,1234642,1245046,1255347,1265799,1276127,1286633,1297091,1307464,1317891,1328334,1338664,1349040,1359618,1369996,1380188,1390560,1400856,1411053,1421328,1431701,1442065,1452496,1462673,1473062,1483349,1493547,1503636,1513909,1524091,1534283,1544487,1554678,1564821,1575146,1585338,1595497,1605572,1615687,1625865,1636218,1646387,1656382,1666612,1676752,1686796,1696843,1707064,1717042,1727161,1737182,1747355,1757377,1767508,1777393,1787452,1797325,1807356,1817309,1827184,1837271,1847285,1857139,1867183,1877162,1887214,1897181,1907148,1917120,1927083,1936985,1946933,1956930,1966902,1976818,1986827,1996661,2006634,2016428,2026323,2036082,2045956,2055840,2065740,2075608,2085485,2095242,2105159,2115031,2124835,2134761,2144698,2154457,2164324,2174099,2183825,2193499,2203189,2212975,2222639,2232388,2242227,2252101,2261840,2271626,2281473,2291134,2300797,2310722,2320382,2330134,2339817,2349702,2359387,2369020,2378709,2388398,2398065,2407689,2417283,2426995,2436619,2446302,2455902,2465612,2475061,2484902,2494495,2504165,2513849,2523407,2532908,2542520,2552132,2561849,2571493,2581094,2590573,2600366,2609789,2619255,2628841,2638559,2648152,2657591,2667151,2676765,2686379,2695962,2705465,2715025,2724581,2734168,2743677,2753168,2762663,2772260,2781797,2791307,2800841,2810439,2819868,2829445,2839016,2848520,2857903,2867343,2876845,2886182,2895685,2905192,2914785,2924219,2933633,2943042,2952462,2961955,2971375,2980845,2990293,2999781,3009166,3018595,3028083,3037493,3047118,3056622,3066042,3075402,3084821,3094251,3103811,3113327,3122745,3132216,3141569,3150699,3159981,3169355,3178776,3188128,3197484,3206931,3216222,3225426,3234671,3243915,3253242,3262577,3271943,3281331,3290587,3299881,3309228,3318568,3327859,3337037,3346399,3355857,3365031,3374432,3383763,3393009,3402304,3411617,3420931,3430216,3439442,3448699,3457971,3467168,3476496,3485778,3495078,3504397,3513617,3522909,3532179,3541628,3550856,3560067,3569314,3578580,3587798,3596985,3606224,3615409,3624731,3633932,3643017,3652173,3661394,3670696,3679926,3689137,3698223,3707495,3716681,3725743,3734929,3744094,3753317,3762546,3771670,3780841,3790010,3799202,3808407,3817479,3826744,3835876,3845033,3854166,3863350,3872486,3881758,3891084,3900279,3909476,3918701,3927896,3936983,3946175,3955311,3964544,3973718,3982770,3991891,4000972,4010106,4019228,4028362,4037560,4046626,4055727,4064855,4073804,4083046,4092115,4101092,4110303,4119348,4128371,4137411,4146604,4155701,4164835,4173780,4182982,4192218,4201374,4210505,4219680,4228818,4237973,4246958,4256032,4265037,4274085,4283135,4292089,4301205,4310170,4319214,4328355,4337333,4346275,4355313,4364255,4373335,4382383,4391333,4400404,4409455,4418525,4427591,4436693,4445672,4454798,4463795,4473064,4482019,4491028,4499986,4508931,4518010,4527140,4536058,4545008,4553960,4562924,4571971,4580827,4589848,4598907,4607784,4616926,4625890,4634907,4643769,4652704,4661690,4670507,4679481,4688513,4697573,4706483,4715392,4724387,4733222,4742097,4751097,4760015,4768990,4777943,4787071,4796059,4805067,4813934,4822865,4831780,4840706,4849808,4858751,4867678,4876576,4885585,4894479,4903545,4912408,4921261,4930225,4939087,4948101,4957110,4965979,4974864,4983914,4992797,5001747,5010652,5019503,5028253,5037201,5046070,5054881,5063754,5072839,5081778,5090704,5099508,5108421,5117196,5126156,5135038,5144013,5153048,5161931,5170794,5179606,5188501,5197446,5206437,5215397,5224221,5233166,5241989,5250803,5259524,5268222,5277157,5286138,5295011,5303885,5312800,5321787,5330595,5339400,5348146,5356917,5365690,5374530,5383328,5392188,5400982,5409998,5418717,5427552,5436476,5445299,5454063,5462889,5471586,5480437,5489069,5497933,5506771,5515505,5524265,5533047,5541896,5550721,5559480,5568139,5576835,5585618,5594444,5603174,5612019,5620798,5629616,5638441,5647258,5655987,5664869,5673639,5682273,5691077,5699879,5708628,5717559,5726363,5735070,5743913,5752671,5761455,5770143,5778876,5787569,5796439,5805153,5813918,5822679,5831456,5840135,5848738,5857370,5866044,5874795,5883643,5892435,5901290,5910027,5918622,5927378,5936101,5944671,5953328,5962098,5970903,5979699,5988543,5997303,6006101,6014781,6023332,6031988,6040633,6049322,6058006,6066523,6075297,6084017,6092712,6101575,6110292,6118921,6127811,6136618,6145305,6153843,6162485,6171151,6179837,6188511,6197245,6205982,6214494,6223388,6232072,6240696,6249313,6257937,6266705,6275354,6284059,6292859,6301510,6310264,6318895,6327569,6336292,6344929,6353673,6362424,6371095,6379866,6388669,6397409,6406157,6414924,6423640,6432151,6440726,6449394,6457939,6466536,6475130,6483775,6492406,6501095,6509785,6518450,6527091,6535633,6544288,6552948,6561679,6570330,6579087,6587697,6596405,6605007,6613764,6622414,6631024,6639841,6648470,6657216,6665886,6674554,6683160,6691826,6700448,6709048,6717637,6726244,6734920,6743586,6752183,6760782,6769453,6777990,6786587,6795314,6803853,6812551,6821264,6829858,6838369,6846979,6855565,6864208,6872777,6881480,6890112,6898660,6907232,6915732,6924222,6932768,6941313,6950034,6958441,6966981,6975628,6984217,6992704,7001393,7009958,7018607,7027074,7035535,7044205,7052817,7061541,7070165,7078798,7087404,7095983,7104564,7113072,7121761,7130243,7138739,7147378,7155940,7164485,7173069,7181658,7190255,7198806,7207507,7216077,7224582,7233249,7241783,7250321,7258815,7267450,7276075,7284502,7293005,7301406,7309907,7318623,7327204,7335767,7344353,7352860,7361450,7369864,7378377,7386879,7395424,7404004,7412572,7421178,7429858,7438444,7446943,7455413,7463898,7472398,7480931,7489389,7497882,7506535,7514953,7523366,7531852,7540487,7548917,7557604,7566089,7574666,7583242,7591618,7600114,7608627,7617035,7625408,7633932,7642388,7650948,7659472,7667987,7676530,7684990,7693374,7701894,7710304,7718799,7727345,7735816,7744376,7753018,7761573,7770107,7778501,7786965,7795380,7803805,7812225,7820491,7828815,7837260,7845619,7854212,7862591,7871177,7879769,7888207,7896614,7905183,7913687,7922046,7930547,7938912,7947388,7955931,7964408,7972795,7981224,7989581,7998048,8006633,8015049,8023366,8031868,8040386,8048938,8057458,8065957,8074471,8082861,8091313,8099687,8108075,8116472,8124966,8133388,8141733,8150296,8158671,8167132,8175617,8184009,8192401,8200829,8209333,8217820,8226367,8234746,8243077,8251502,8260027,8268537,8276830,8285320,8293724,8302153,8310658,8319078,8327402,8335900,8344266,8352595,8361102,8369328,8377799,8386237,8394597,8403049,8411423,8419743,8428066,8436506,8444973,8453339,8461612,8470093,8478276,8486825,8495238,8503800,8512031,8520597,8529049,8537502,8545895,8554247,8562717,8571246,8579639,8588066,8596462,8604900,8613270,8621661,8630051,8638361,8646686,8654963,8663344,8671701,8679971,8688198,8696594,8705086,8713428,8721819,8730274,8738764,8747146,8755519,8763907,8772275,8780754,8789145,8797599,8806019,8814262,8822651,8831004,8839483,8847883,8856229,8864526,8872903,8881221,8889657,8897990,8906316,8914672,8922999,8931377,8939803,8948238,8956527,8964930,8973280,8981567,8989849,8998263,9006580,9014894,9023216,9031709,9040018,9048395,9056784,9065132,9073372,9081734,9090120,9098375,9106786,9115173,9123562,9131912,9140374,9148722,9156953,9165292,9173654,9181840,9190214,9198664,9207029,9215387,9223628,9231879,9240116,9248503,9256938,9265413};
namespace MR32{
	int const n=3;
	int const base[]={2,7,16};
	inline long long power(int x,int k,int p){
		long long ans=1,num=x%p;
		for(int i=k;i;i>>=1){
			if(i&1)
				(ans*=num)%=p;
			(num*=num)%=p;
		}
		return ans;
	}
	inline bool check(int p,int base){
		int n=p-1;
		while(!(n&1))n>>=1;
		long long m=power(base,n,p);
		while(n!=p-1&&m!=1&&m!=p-1){
			(m*=m)%=p;
			n<<=1;
		}
		return m==p-1||(n&1)==1;
	}
	inline bool prime(int p){
		if(p>20&&(p%2==0||p%3==0||p%5==0))return 0;
		for(int i=0;i<n;i++)
			if(base[i]==p)return 1;
		if(p==1||!(p&1))return 0;
		for(int i=0;i<n;i++)
			if(!check(p,base[i]))
				return 0;
		return 1;
	}
};
inline bool check(int x) {
    for (int i=2;i*i<=x;++i)
        if (x%i==0)
            return false;
    return true;
}
int n,m;
inline int get(int x) {
    int now=0,ret=0;
    for (int i=0;i<=x;i+=1000000)
        ret=num[i/1000000],now=i;
    for (int i=now+1;i<=x;++i)
        if (MR32::prime(i)&&MR32::prime(i+2010))
            ++ret;
    return ret;
}
int main()
{
    freopen("brothers.in","r",stdin);
    freopen("brothers.out","w",stdout);
    scanf("%d%d",&m,&n);
    printf("%d\n",max(0,get(n-2010)-get(m-1)));
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42189317/article/details/80284975