6 条题解

  • 1
    @ 2023-3-28 19:04:44
    #include<iostream>
    using namespace std;
    int a,b,x,cnt;
    bool check(int n){
    	for(int i=2;i*i<=n;i++){
    		if(n%i==0)return false;
    	}
    	return true;
    }
    int main(){
    	cin>>a>>b>>x;
    	for(int i=a;i<=b;i++){
    		if(check(i)){
    			int tmp=i;
    			while(tmp){
    				if(tmp%10==x){
    					cnt++;
    					break;
    				}
    				tmp/=10;
    			}
    		}
    	}
    	cout<<cnt;
    	return 0;
    }
    
    • 0
      @ 2024-4-12 18:57:24

      #include<bits/stdc++.h> using namespace std; bool zs(int i){ if(i1){ return 0; } for(int k=2;k*k<=i;k++){ if(i%k0){ return 0; } } return 1; } int main(){ int a,b,d; int cnt=0; cin>>a>>b>>d; for(int i=a;i<=b;i++){ if(zs(i)1){ int t=i; while(t>0){ if(t%10d){ cnt++; break; } t/=10; } } } cout<<cnt; return 0; }

      • 0
        #include <bits/stdc++.h>
        using namespace std;
        int n,m,ans,l;
        bool a[4000005]={};
        
        bool c(int x)
        {
        	int i=1;
        	while(i<=x)
        	{
        		if(x/i%10==l)
        		{
        			return 1;
        		}
        		else
        		{
        			i*=10;
        		}
        	}
        	return 0;
        }
        
        int main()
        {
        	cin>>n>>m>>l;
        	for(int i=2;i<=sqrt(m);i++)
        	{
        		if(a[i]==0)
        		{
        			for(int j=i*2;j<=m;j+=i)
        			{
        				a[j]=1;
        			}
        		}
        	}
        	for(int i=n;i<=m;i++)
        	{
        		if(a[i]==0 && c(i))
        		{
        			ans++;
        		}
        	}
        	cout<<ans;
            return 0;
        }
        

        跑的飞起的筛素数 (欧拉筛表示不服)

      • 0
        @ 2023-3-9 17:51:59
        #include<iostream>
        
        using namespace std;
        
        bool pdzs(int n){
        	if(n<2){
        		return 0;
        	}
        	for(int i = 2; i * i <= n; i ++ ){
        		if(n%i == 0){
        			return 0;
        		}
        	}
        	return 1;
        }
        
        bool pdtj(int x,int y){
        	while(x != 0){
        		if(x%10==y){
        			return 1;
        		}
        		x/=10;
        	}
        	return 0;
        }
        
        int main(){
        	int n,m,x,ans = 0;
        	cin>>n>>m>>x;
        	for(int i = n; i <= m; i ++ ){
        		if(pdzs(i)&&pdtj(i,x)){
        			ans ++ ;
        		}
        	}
        	cout<<ans;
        	return 0;
        } 
        
        • 0
          @ 2023-1-31 19:24:23

          数据有点大,筛质数要快

          如果你还在用这个朴素算法:

          bool su(int x)
          {
              for(int i = 2; i * i <= x; i++)
              {
                  if(x % i == 0)
                  {
                      return 1;
                  }
              }
              return 0;
          }
          

          image

          听取TLE声一片


          prime:

          有点耳熟

          bool prime[N];
          void prime_find(int x)
          {
              prime[1] = 1;
          	for(int i = 2; i * i <= x; i++)
          	{
          		if(prime[i] == 0)
          		{
          			for(int j = i * i; j <= m; j += i)
          			{
          				prime[j] = 1;
          			}
          		}
          	}
          }
          

          image

          峰值时间38ms,跑得飞快


          最后放上完整代码

          #include <iostream>
          #include <stack>
          #include <cmath>
          #include <vector>
          #include <string.h>
          #include <queue>
          #include <stdio.h>
          #include <iomanip>
          #include <cstdio>
          #include <algorithm>
          #define int long long
          using namespace std;
          const int N = 4e6 + 10;//<-
          const int INF = 0x3f3f3f3f;
          int n, m, k;
          bool prime[N];//筛素数
          void prime_find(int x)
          {
              prime[1] = 1;
          	for(int i = 2; i * i <= x; i++)
          	{
          		if(prime[i] == 0)
          		{
          			for(int j = i * i; j <= m; j += i)
          			{
          				prime[j] = 1;
          			}
          		}
          	}
          }
          signed main()
          {
          	cin >> n >> m >> k;
              prime_find(m);
              if(n % 2 == 0)
              {
                  n++;//微调,避免是偶数
              }
              int ans = 0;
              for(int i = n; i <= m; i += 2)//两个两个加
              {
                  if(prime[i] == 0)//是素数
                  {
                      int sum = i;
                      while(sum)//分离数位
                      {
                          int l = sum % 10;
                          if(l == k)
                          {
                              ans++;
                              break;
                          }
                          sum /= 10;
                      }
                  }
              }
              cout << ans << endl;
          	return 0;//完结撒花
          }
          
          • @ 2023-3-9 17:51:36

            开玩笑,你TLE是写错了吧?

            这代码都AC。

            #include<iostream>
            
            using namespace std;
            
            bool pdzs(int n){
            	if(n<2){
            		return 0;
            	}
            	for(int i = 2; i * i <= n; i ++ ){
            		if(n%i == 0){
            			return 0;
            		}
            	}
            	return 1;
            }
            
            bool pdtj(int x,int y){
            	while(x != 0){
            		if(x%10==y){
            			return 1;
            		}
            		x/=10;
            	}
            	return 0;
            }
            
            int main(){
            	int n,m,x,ans = 0;
            	cin>>n>>m>>x;
            	for(int i = n; i <= m; i ++ ){
            		if(pdzs(i)&&pdtj(i,x)){
            			ans ++ ;
            		}
            	}
            	cout<<ans;
            	return 0;
            } 
            
        • 0
          @ 2022-7-10 9:35:25

          #include<stdio.h> #include<iostream> using namespace std; int main() { int a,b,d,sum=0,ans=0; cin>>a>>b>>d; if(a%20) a+=1; for(int i=a;i<=b;i+=2) { int k=i; int flag=1; for(int j=3;j*j<=k;j+=2) { if(k%j0) { flag=0; break; } } if(flag1) { while(k) { sum=k%10; if(sumd) { ans+=1; break; } k/=10; } } } cout<<ans<<endl; return 0; }

          • 1

          信息

          ID
          975
          时间
          1000ms
          内存
          128MiB
          难度
          7
          标签
          递交数
          395
          已通过
          97
          上传者