hdu5317RGCDQ 打表

//F[x] 表示x的素数因子的大小
//问在整数区间[l,r]的数gcd的最大值
//由于F[x]的最大值为7
//可以打表存下F[i][j] 表示前j个数中有i个素数因子的有几个
//那么F[i][r] - F[i][l-1]表示的是[l,r]区间内有i个素数因子的数有几个
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 1000010 ;
int isp[maxn] ;
int sum[maxn] ;
int F[10][maxn] ;
int a[10] ;
void get_prime()
{
    memset(sum , 0 , sizeof(sum)) ;
    memset(isp , 0 ,sizeof(isp)) ;
    for(int i = 2;i < maxn;i++)
    {
        if(isp[i])continue ;
        for(int j = i ;j < maxn ;j += i)
        {
            if(i != j)
            isp[j] = 1;
            sum[j] ++ ;
        }
    }
}
int gcd(int a , int b)
{
    if(b == 0)return a ;
    return gcd(b , a%b) ;
}
int main()
{
    int T ;
    int L , R ;
    get_prime() ;
    memset(F , 0 , sizeof(F)) ;
    for(int i = 1;i < maxn;i++)
    {
        for(int j = 1;j <= 7;j++)
        F[j][i] = F[j][i-1] ;
        F[sum[i]][i]++;
    }
    scanf("%d" ,&T ) ;
    while(T--)
    {
        int l , r ;
        scanf("%d%d" ,&l , &r) ;
        int ma = 1 ;
        for(int i = 2;i <= 7;i++)
        {
            a[i] = (F[i][r] - F[i][l-1]) > 1 ? i : 1;
            if(F[i][r] - F[i][l-1] >= 2)ma = max(ma , i);
            for(int j = 2;j < i;j++)
            ma = max(gcd(a[i] , a[j]) , ma) ;
        }
        cout<<ma<<endl;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 13:34:30

hdu5317RGCDQ 打表的相关文章

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

SqlServer给一个表增加多个字段语法

添加字段语法 alter table table_name add column_name +字段类型+ 约束条件 给一个表增加多个字段: use NatureData go alter table XunHu add MaleCount varchar(50) null, FemaleCount varchar(50) null, SubadultCount varchar(50) null, LarvaeCount varchar(50) null, TraceType varchar(50

凯撒密码、GDP格式化输出、99乘法表

1凯撒密码加密plaincode=input('请输入明文:')print('密文:',end='')for i in plaincode:print(chr(ord(i)+3),end='') 2.国家名称 GDP总量(人民币亿元) 中国 ¥765,873.4375澳大利亚 ¥ 78,312.4375 print('国家名称 GDP总量(人民币亿元)')print('{0:''<12}¥{1:''>10,.2f}'.format('中国',765873.4375))print('{0:''&

c打印9*9乘法表

c打印9*9乘法表(这里提供了两种打印方法).乘号两边有规律可寻,其左边递减,右边递增. 1 #include <stdio.h> 2 int main() 3 { 4 int i, j, result; 5 for (i = 9; i >= 1; i--) //外层循环,从9开始,每次循环自减1 6 { 7 for (j = 1; j <= i; j++) //内层循环,从1开始,每次循环自加1 8 { 9 result = i*j; 10 printf("%d*%d=

MySQL(九)之数据表的查询详解(SELECT语法)二

上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1)创建数据表suppliers 前面已经有一张表是book表,我们在建立一张suppliers(供应商)表和前面的book表对应. 也就是说 让book中s_id字段值指向suppliers的主键值,创建一个外键约束关系. 其实这里并没有达到真正的外键约束关系,只是模拟,让fruits中的s_id中

C# 远程服务器 安装、卸载 Windows 服务,读取远程注册表,关闭杀掉远程进程

这里安装windows服务我们用sc命令,这里需要远程服务器IP,服务名称.显示名称.描述以及执行文件,安装后需要验证服务是否安装成功,验证方法可以直接调用ServiceController来查询服务,也可以通过远程注册表来查找服务的执行文件:那么卸载文件我们也就用SC命令了,卸载后需要检测是否卸载成功,修改显示名称和描述也用sc命令.至于停止和启动Windows服务我们可以用sc命令也可以用ServiceController的API,当停止失败的时候我们会强制杀掉远程进程,在卸载windows

数据库表:区域表system_district

区域表[system_district] 数据模型 建表脚本 -- ---------------------------- -- Table structure for system_district -- ---------------------------- DROP TABLE IF EXISTS `system_district`; CREATE TABLE `system_district` (   `district_id` bigint(20) unsigned NOT NUL

SQL Server 里面sql语句备份表

select * into 新表名字  from XXXX 新表名字中最好加入日期  提醒自己哪天创建 var code = $("#editWin input[name=Code]").val();        var re = new RegExp(/^[0-9a-zA-Z]*$/g);        if (!re.test(code)) {            Msg.show("请输入英文或数字", 9);            return fals

SQL基础:数据表的创建

1. 先选择创建表所在的数据库 2. 创建表 3. 查看表是否创建成功 4. 主键:要求主键列的数据唯一,且不允许为空.主键能够唯一的标识表中的每一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度. 主键分为:单字段主键和多字段联合主键. 4.1 单字段主键 4.1.1 定义方式一:在定义列的同时指定主键 4.1.2 定义方式二:在定义完所有的列之后指定主键 4.2 多字段联合主键 5. 使用外键约束 外键用来在两个表之间建立连接,可以是一列或多列.一个表的外键可以是