zoukankan      html  css  js  c++  java
  • HDU4548+筛素数

    先筛出素数,再筛出美素数。

    简单题。

    /*
    筛素数
    */
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<stack>
    #include<math.h>
    #include<map>
    using namespace std;
    const int maxn = 1000005;
    int IsPrime[ maxn ],IsSpecialPrime[ maxn ];
    int GetSum( int x ){
    	int ans = 0;
    	while( x ){
    		ans += x%10;
    		x/=10;
    	}
    	return ans;
    }
    
    void init_prime(){
    	for( int i=1;i<maxn;i+=2 )
    		IsPrime[i] = 1;
    	for( int i=0;i<maxn;i+=2 )
    		IsPrime[i] = 0;
    	IsPrime[1] = 0;
    	IsPrime[2] = 1;
    	for( int i=3;i<maxn;i++ ){
    		if( IsPrime[i]==1 ){
    			int t,delta;
    			delta = i*2;
    			t = delta+i;
    			while( t<maxn ){
    				IsPrime[t] = 0;
    				t += delta;
    			}
    		}
    	}
    	//for( int i=maxn-1;;i-- ){
    		//if( IsPrime[i]==1 ){
    			//printf("max=%d
    ",i);
    			//break;
    		//}
    	//}
    	//memset( IsSpecialPrime,0,sizeof(IsSpecialPrime) );
    	for( int i=0;i<maxn;i++ ){
    		if( IsPrime[i]==1&&IsPrime[GetSum(i)]==1 ){
    			IsSpecialPrime[i] = 1;
    		}
    		else{
    			IsSpecialPrime[i] = 0;
    		}
    	}
    	for( int i=1;i<maxn;i++ )
    		IsSpecialPrime[ i ] += IsSpecialPrime[ i-1 ];
    }
    int main(){
    	init_prime();
    	int ca;
    	scanf("%d",&ca);
    	int T = 1;
    	while( ca-- ){
    		printf("Case #%d: ",T++);
    		int L,R;
    		scanf("%d%d",&L,&R);
    		printf("%d
    ",IsSpecialPrime[R]-IsSpecialPrime[max(0,L-1)]);
    	}
    	return 0;
    }



  • 相关阅读:
    API创建员工联系人
    API创建员工Element
    API创建员工
    API创建员工支付方式
    用API创建用户
    用API给用户添加职责
    创建银行API
    创建银行分行的API
    初探C++ 深拷贝与浅拷贝
    推断数据是否为整数
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3241466.html
Copyright © 2011-2022 走看看