2015 Multi-University Training Contest 3 1002 RGCDQ
RGCDQ #
Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5317
#
Mean:
定义函数f(x)表示:x的不同素因子个数。
如:f(2) = 1, f(6) = 2;
给定L和R(L<=i<j<=R),求区间内任意不相等的两个数f(x)的最大公约数的最大值。
analyse:
因为2*3*5*7*11*13*17 >1e6,所以f(x)的值最大为7;
我们先打表求出每个数的f(x)值;
f[i][j]表示2~i中质因数个数为j的个数。
然后再利用前缀和f[r][i] - f[l-1][i],求出区间[l, r]的值。
Time complexity: O(NlogN)
Source code:
/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-07-28-19.01
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#define LL long long
#define ULL unsigned long long
using namespace std;
int T, a, b;
int f[1000009][10];
const int NN = 1000005;
int p[NN];
bool v[NN];
void cntPrimeNum()
{
for( int i = 2; i < NN; ++i )
{
if( !v[i] )
for( int j = i; j < NN; j += i )
{
v[j] = true;
++p[j];
}
}
}
int main()
{
cntPrimeNum();
for( int i = 1; i < NN; ++i )
for( int j = 7; j > 0; --j )
if( p[i] == j ) f[i][j] = 1;
for( int i = 1; i <= 1000000; ++i )
for( int j = 1; j <= 7; ++j )
f[i][j] += f[i - 1][j];
scanf( "%d", &T );
while( T-- )
{
int ans = 1;
scanf( "%d %d", &a, &b );
for( int i = 7; i > 0; --i )
{
if( f[b][i] - f[a - 1][i] > 1 )
{
ans = i;
break;
}
}
printf( "%d\n", ans );
}
return 0;
}
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-07-28-19.01
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#define LL long long
#define ULL unsigned long long
using namespace std;
int T, a, b;
int f[1000009][10];
const int NN = 1000005;
int p[NN];
bool v[NN];
void cntPrimeNum()
{
for( int i = 2; i < NN; ++i )
{
if( !v[i] )
for( int j = i; j < NN; j += i )
{
v[j] = true;
++p[j];
}
}
}
int main()
{
cntPrimeNum();
for( int i = 1; i < NN; ++i )
for( int j = 7; j > 0; --j )
if( p[i] == j ) f[i][j] = 1;
for( int i = 1; i <= 1000000; ++i )
for( int j = 1; j <= 7; ++j )
f[i][j] += f[i - 1][j];
scanf( "%d", &T );
while( T-- )
{
int ans = 1;
scanf( "%d %d", &a, &b );
for( int i = 7; i > 0; --i )
{
if( f[b][i] - f[a - 1][i] > 1 )
{
ans = i;
break;
}
}
printf( "%d\n", ans );
}
return 0;
}
作者:北岛知寒
出处:https://www.cnblogs.com/crazyacking/p/4687230.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?