7 条题解

  • 0
    @ 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
      @ 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
            标签
            递交数
            456
            已通过
            134
            上传者