2 条题解

  • 0
    @ 2025-10-8 16:48:22
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    LL f[2110000];
    LL dfs(int n)
    {
        if(n <= 2000000 && f[n] > 0) return f[n];
        LL ans = 1;
        int t = sqrt(n + 1);
        for(int i = 2; i <= t; i++)
        {
            if(n % i == 0) ans += dfs(i) + dfs(n / i);
        }
        if(t * t == n) ans -= f[t];
        if(n <= 2000000) f[n] = ans;
        return ans;
    }
    int main()
    {
        int n;
        scanf("%d", &n);
        f[1] = 1;
        printf("%lld\n", dfs(n));
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:48:15
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      LL f[2110000];
      LL dfs(int n)
      {
      	if(n<=2000000&&f[n]>0)return f[n];
      	LL ans=1;int t=sqrt(n+1);
      	for(int i=2;i<=t;i++)
      	{
      		if(n%i==0)ans+=dfs(i)+dfs(n/i);
      	}
      	if(t*t==n)ans-=f[t];
      	if(n<=2000000)f[n]=ans;
      	return ans;
      }
      int main()
      {
      	int n;scanf("%d",&n);
      	f[1]=1;
      	printf("%lld\n",dfs(n));
      	return 0;
      }
      • 1

      信息

      ID
      84
      时间
      1000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      132
      已通过
      50
      上传者