【问题标题】:Count sphenic odd number in range efficiently有效计算范围内的蝶形奇数
【发布时间】:2018-08-06 13:15:53
【问题描述】:

我找不到解决这个问题的好方法; 我需要计算范围效率中的 sphenic 奇数个数,我使用过筛算法,但通常应该有更好的方法来做到这一点。

一个奇数是3个不同的奇质数的乘积。

我已经尝试过了,但它需要很多时间。

char t[200000001];
int dp[200000001];
int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(false);
   for(int i=3;i<200000001;i+=2)
   {
       if(t[i]==0)
        {
            for(int j=i;j<200000001;j+=i)
                t[j]++;
        }
        if(t[i]==3 && i%2)
            dp[i]=1;
   }


    for(int i=100;i<200000001;i++)
        dp[i]+=dp[i-1];

    int test=0;
    cin>>test;
    for(int tt=1;tt<=test;tt++)
    {
        int a,b;
        cin>>a>>b;
        cout<<dp[b]-dp[a-1]<<"\n";
    }

}

谢谢你

编辑: 我正在尝试解决这个问题: http://codeforces.com/group/HtnK54FR7R/contest/219854/problem/D

【问题讨论】:

  • 我不理解链接的问题陈述中的输出示例。区间 (1, 100) 的答案怎么可能是 0?
  • @גלעדברקן 最小的 sphenic 奇数(或幻数,根据问题)是 3*5*7 = 105,大于 100。
  • @EvilTak 啊,tx :)

标签: algorithm primes number-theory


【解决方案1】:

从 3 开始的初筛是个好主意。但最高可能有用的素数是……? (提示:200,000,000 / (? * ?))

一种可能的方法是在生成素数时向后枚举两个素数的组合,对第二个最高索引和第三个最低可能索引进行二进制搜索,如果15 * current_prime大于r.

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2022-01-20
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多