zoukankan      html  css  js  c++  java
  • CodeForces 546D

    Description

    两个士兵在玩一个游戏,开始的时候第一个士兵选择一个数n,并把这个数交给第二个士兵,第二个士兵必须选择一个x满足x>1 且n能被x整除,然后将n变为n/x,然后把这个数交给第一个士兵,依次循环,当n等于1时,游戏结束,第二个士兵所得的分数为他执行的游戏轮数(选择x的次数)。

    为了使游戏更有趣…,第一个士兵选择的n满足如下的形式 a!/b!(a>=b), a!表示a的阶乘。

    第二个士兵得到的最大分数是多少?

    Input

    第一行包含一个整数t (1 ≤t≤ 1 000 000),表示士兵玩游戏的次数。

    接下来有t行,每行两个整数a, b(1 ≤b≤a≤ 5 000 000),用来表示n(一开始第一个士兵选择的数n)。

    Output

    每一次游戏输出第二个士兵能够得到的最大分数。

    Sample Input

    2

    3 1

    6 3

    Sample Output

    2

    5

    质因数分解,再前缀和处理

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 using namespace std;
     6 #define max 5000005
     7 int a[max];
     8 int main()
     9 {
    10     int t,r,l,k,i,j;
    11     while(scanf("%d",&t)!=EOF)
    12     {
    13         for(i=2;i<max;i++)
    14         if(!a[i])//确保质因数的倍数已经遍历过,不再重复遍历
    15         {
    16             for(j=i;j<max;j+=i)
    17             {
    18                 k=j;
    19                 while(k%i==0)
    20                 {
    21                     a[j]++;
    22                     k/=i;
    23                 }
    24             }
    25         }
    26         for(i=2;i<max;i++)
    27         a[i]+=a[i-1];
    28         while(t--)
    29        {
    30             scanf("%d%d",&r,&l);
    31             printf("%d
    ",a[r]-a[l]);
    32        }
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    Java8新特性
    为什么要使用ORM技术?和 JDBC 有何不一样?
    HTTP Status 500
    重装Oracle时出现SID已存在问题的解决办法
    数据库模式显示的Swing表格
    自然连接和等值连接
    雷林鹏分享:Java 循环结构
    雷林鹏分享:Java 运算符
    雷林鹏分享:Java 修饰符
    雷林鹏分享:Java 变量类型
  • 原文地址:https://www.cnblogs.com/WHLdbk/p/5724244.html
Copyright © 2011-2022 走看看