2 条题解

  • 1
    @ 2021-8-7 21:30:13

    C++ :

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #define ll long long
    using namespace std;
    const int maxn=1000010;
    int v[maxn];
    int prime[maxn],c[maxn];
    int m;
    void primes(int n){
        m = 0;
        memset(v, 0, sizeof v);
        for(int i = 2; i <= n; i++){
            if(v[i] == 0){
                prime[++m] = i;
                v[i] = i;
            }
            for(int j = 1; j <= m; j++){
                if(prime[j] > v[i] || prime[j] > n / i)
                    break;
                v[i*prime[j]] = prime[j];
            }
        }
    }
     
    void solve(int n){
        int cnt = 0;
        for(int i = 1; i <= m; i++){
            cnt = 0;
            for(ll j = prime[i]; j <=n ; j = j*prime[i])
                cnt += n / j;
            printf("%d %d\n", prime[i], cnt);
        }
    }
     
    int main()
    {
        int n;
        scanf("%d", &n);
        primes(n);
        solve(n);
        return 0;
    }
    
    
    • 0
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e6+10;
      
      int n,ans;
      int f[N],p[N];
      bool v[N];  
      
      void Prime()
      {
          v[0]=v[1]=1;
          for(int i=2;i<=n;i++)
      	{
              if(!v[i]) 
      		{ 
                  for(int j=i*2;j<=n;j+=i)
      			{ 
                      v[j]=1;
                  }
              }
          }
          int l=0;
          for(int i=2;i<=n;i++)
      	{
              if(!v[i])
              {
              	p[++l]=i;
      		}
          }
          return;
      }
      
      int main()
      {
      	cin>>n;
      	Prime();
      	for(int i=2;i<=n;++i)
      	{
      		int k=i,s=1;
      		for(int j=p[s];k>=j;)
      		{
      			if(k%j==0)
      			{
      				f[j]++;
      				k/=j;
      			}
      			else if(v[k]==0)
      			{
      				f[k]++;
      				break;
      			}
      			else
      			{
      				j=p[++s];
      			}
      		}	
      	}
      	for(int i=2;i<=n;++i)
      	{
      		if(f[i]>=1)
      		{
      			printf("%d %d\n",i,f[i]);
      		}	
      	}
      	return 0;
      }
      
      • 1

      信息

      ID
      108
      时间
      1000ms
      内存
      128MiB
      难度
      1
      标签
      递交数
      37
      已通过
      32
      上传者