zoukankan      html  css  js  c++  java
  • 游戏(素数判断)


    考试的时候写T了。。。。不好意思贴自己的代码了,看std十分优美,就加了注释贴上来了qwq

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
    #define per(i,a,b) for(int (i)=(a);(i)>=(b);(i)--)
    const int maxn=1e6+5;
    int n,mini,tot;
    int p[maxn],vis[maxn],maxi[maxn];
    void getp(){
    	rep(i,2,n){
    		if(!vis[i])p[++tot]=i;
    		rep(j,1,tot){
    			if(p[j]*i>n)break;
    			vis[i*p[j]]=1;
    			if(i%p[j]==0)break;
    		}
    	}
    }
    //用线性筛会更快一点qwq 但是这个的时间复杂度已经很优秀了
    //这个是对素数的预处理 
    int main(){
    	cin>>n;
    	getp();
    	rep(i,1,tot) 
    		for(int j=p[i];j<=n;j+=p[i]) 
    			maxi[j]=max(maxi[j],p[i]);
    	//寻找h2的质因子里面的最大的
    	//因为我们要找的是[h2-质因子+1,h2]这个范围内的合法数(质数不合法)来当作h1
    	//所以显然最大的质因子来找是最优秀的
    	//因为它会把小的也覆盖掉qwq 
    	//因为h2大于等于h1,h0,所以顺便一起处理出来了他们的最大的质因子 
    	int ans=n;
    	per(i,n,n-maxi[n]+1)
    	//其实正着写也无所谓qwq 
    		if(i!=maxi[i])
    			ans=min(ans,i-maxi[i]+1);
    	//推导两遍即可 
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    CodeForces
    处女座的测验(一)(素数筛+思维)
    Codeforces-D-Diverse Garland(思维)
    linux中open函数使用
    linux管道通信
    linux中memset的正确用法
    在linux中read、write函数
    Ubuntu+Win7+Samba实现文件共享
    【转】教你如何实现linux和W…
    《转》我的ARM学习经历
  • 原文地址:https://www.cnblogs.com/fengxunling/p/9741666.html
Copyright © 2011-2022 走看看