8 条题解

  • 1
    @ 2025-11-20 20:18:09
    本人打的AC代码,请各位大佬指点
    
    # include <bits/stdc++.h>
    
    using namespace std;
    bool IsPrime(int x){
    	if(x<2)return false;
    	if(x==2)return true;
    	for(int i = 2;i*i<=x;i++)
    		if(x%i==0)
    		    return false;
    	return true;
    }
    bool HasD(int n,int d){
    	while(n>0){
    		if(n%10==d)return true;
    		n/=10;
    	}
    	return false;
    }
    int main(){
    	int a,b,d,tot=0;
    	cin>>a>>b>>d;
    	for(int i = a;i<=b;i++){
    		if(HasD(i,d)&&IsPrime(i))tot++;
    	}
    	cout<<tot<<"\n";
    	return 0;
    }
    
    • 0
      @ 2026-6-23 17:40:19

      include <bits/stdc++.h>

      using namespace std; bool IsPrime(int x){ if(x<2)return false; if(x2)return true; for(int i = 2;i*i<=x;i++) if(x%i0) return false; return true; } bool HasD(int n,int d){ while(n>0){ if(n%10==d)return true; n/=10; } return false; } int main(){ int a,b,d,tot=0; cin>>a>>b>>d; for(int i = a;i<=b;i++){ if(HasD(i,d)&&IsPrime(i))tot++; } cout<<tot<<"\n"; return 0; }

      • 0
        @ 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;
        }
        
        • -1
          @ 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; }

          • -1
            @ 2023-9-9 13:46:16
            #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;
            }
            

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

          • -1
            @ 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;
            } 
            
            • -1
              @ 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;
                } 
                
            • -1
              @ 2022-7-10 9:35:25

              #include<stdio.h> #include 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
              难度
              6
              标签
              递交数
              526
              已通过
              155
              上传者