本文共 1629 字,大约阅读时间需要 5 分钟。
zj讲了半天,我什么都没听懂,我只是想自己看看我就能明白吧,我?哈哈哈,高数作业还没写,算法课要不要上
http://blog.csdn.net/wang2332/article/details/79373271
**题意有点重要,其实也就是从2到p这些数字,按倍数往后算吧,直到跳不到,界限 是y
那么也就是说有个素数的话,肯定大于素数,因为素数是肯定满足题意的,那个跳不到的点如果由于p的原因并不是素数的话,也肯定是在素数的后面,因为素数已经是极限情况了.
#includeusing namespace std;//那我们,怎么想呢.int p, y;bool ornot(int x){//判断这个数是否满足条件 //*****用&&的话,只要有一个是假的就要返回假的 //这里用max写也可以 //当数据量特别大的时候,针对一个...针对一个数据吧如果他坚持是素数你还继续往后面算 找素数,请记住,i*i<=x for (int i = 2; i*i<=x&&i <= p; i++)//其实还是少了 { if (x%i == 0)//饿,这个,很大很大的x,被分配了,所以不参加, return false; } // return false; return true;//如果他最后也没能够分配,那就是他了}//另外再注意两点...一个是,p是可以到达所以上面是i=2到i=p//以及,下面要一直减小减小到j>p算作是条件吧//对于大数据我们当然无可奈何.. 但是小数据比如 3 4 这个还是要卡死的//然后按照题意来就是那个树枝还是已经被占领了的.. 所以这里p不能等于int main(){ //int p, y; cin >> p >> y; for (int j = y;j>p; j--) { if (ornot(j)) { cout << j << endl; return 0;//break; } }cout << "-1" << endl; //如果到了 return 0;}
别人的...
//我不理你了,随便你吧
//0309#includeusing namespace std;#define CLR(a,b) memset(a,(b),sizeof(a))#define LL long longconst int MAXN = 1e3 + 10;const double eps = 1e-15;int p, y;bool prime(int x){//也就是x>=sqrt i 就是计算从2到后面吧,从i到p,max也可以,这个&&哪个成立都可以 for (int i = 2; i*i <= x && i <= p; i++) { if (x%i == 0)//i++,如果x%i==0也就是可以除得尽,就跑了好了, //如果一直循环完了都不行的话,...你就去死吧... 所以嗯 return false; } return true;}int main(){ cin >> p >> y;//i是,从2到p的一个范围 //然而他却,倒着从后面往前寻找 //如果寻找的过程中,在2到p里面并不能达到这个数字,就输出好了 for (int i = y; i > p; i--) { if (prime(i)) { cout << i << endl; return 0; } } cout << -1 << endl; return 0;}
最后时间上卡的是...i<sqrt(x),还是p那个.....
差距很多吗?
很多!!!!!!!如果p很大很大,有1e8,那么你每一次都要1e8 个循环....
然后这一次这么多就快要超时了..
但是这个i*i<=x,x=1e8时,也只要花费根号x的时间就好了
!!!这可是关键啊