hdu5317RGCDQ 打表
来源:互联网 发布:手机淘宝达人怎么申请 编辑:程序博客网 时间:2024/06/07 18:39
//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; }}
0 0
- hdu5317RGCDQ 打表
- 打表
- 打表
- 打表
- 打表
- 打表
- 打表
- 打素数表
- 素数打表
- 打素数表
- 高效素数打表
- HDU4133 StrangeStandard 打表?
- hdoj 1297 打表
- 素数打表
- Distinct Primes 打表
- 素数打表
- poj 2262 打表
- 【打表】Round Numbers
- MySQL配置文件my.cnf参数优化和中文详解
- 【Java】(2)Java反射
- 登录后保持在线状态
- Session和Cookie的区别
- Android自定义状态栏通知(Status Notification)的正确实现
- hdu5317RGCDQ 打表
- k-means算法理解
- RT-thread任务调度算法
- Hadoop学习笔记(Map_Reduce的思想)
- 替换textarea的文本编辑框的实现,可现实文字输入与显示图片、表情
- 算法详解---并查集(转)
- 读书笔记MoreEffectiveC++(25)
- 3015年度重大考古发现:中国古代村落“中关村”发现保存完好程序员墓
- Swift:subscript