比赛的时候把公式扣出来了,,但是没有想到用筛法算公因子,,默默学习一下。。

题解:设n=p1^(c1)p2^{c2}...pm^{cm},n=p​1^​c​1*​​​​p​2​^c​2​​​​...p​m​^c​m​​​​,则d(n^k)=(k*c1+1)(k*c2+1)...(k*cm+1)d(n​k​​)=(kc​1​​+1)(kc​2​​+1)...(kc​m​​+1)。然后由于l,r的值很大,但是l-r的范围还是可以接受的,所以我们用一个偏移数组

来存l<=n<=r数的d(n)。然后就是求解l~r中质因子的过程了,这里用筛法求。首先我们知道,一个数可以唯一分解为若干个素数幂的乘积,那么我们先筛出sqrt(r)范围内的所有素数,那么(l,r)中所有的非素数都可以用sqrt(r)

中的素数表示(过程有点类似欧拉函数的筛法)。比赛的时候没想到用筛法,一直挂机,难受。,

ac代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
typedef long long ll;
const int maxn=1e6+;
const int mod=;
ll prime[maxn];
int vis[maxn];
ll d[maxn],arr[maxn];
// 比较大的数组放全局
int ret;
void init()
{
memset(vis,,sizeof(vis));
ret=;
for(ll i=;i<maxn;i++)
{
if(!vis[i])
{
prime[++ret]=i;
for(ll j=i*;j<=maxn;j+=i) vis[j]=;
}
}
}
void solve(ll l,ll r,ll k)
{
for(ll i=;i<=ret;i++)
{
ll pos=(l+prime[i]-)/prime[i]*prime[i];// 定位
while(pos<=r)
{
int zz=;//
while(arr[pos-l]%prime[i]==)
{
zz++;
arr[pos-l]/=prime[i];
}
d[pos-l]*=(k*zz+);
d[pos-l]%=mod;
pos+=prime[i];
}
}
ll ans=;
for(ll i=l;i<=r;i++)
{
if(arr[i-l]==) ans=(ans+d[i-l])%mod;
else ans=(ans+d[i-l]*(k+))%mod;//唯一分解定理
}
printf("%lld\n",ans);
}
// 数差在一定范围 就可以用偏移数组
int main()
{
int t;
scanf("%d",&t);
init();
while(t--)
{
ll l,r,k;
scanf("%lld %lld %lld",&l,&r,&k);
for(ll i=l;i<=r;i++)
{
arr[i-l]=i;
d[i-l]=;
}
solve(l,r,k);
}
return ;
}

自己选的路,跪着也要走下去

埃氏筛法,这里也是一个算各个素数的贡献的思想,由于素数是有限的,所以可以可以把问题的规模变小  by-2017-09-17

最新文章

  1. MVC在添加控制器的时候发现没有添加的选项了?肿么办?
  2. WPF DEV控件-ChartControl用法
  3. EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox显示图片连续刷新出现闪烁问题
  4. Action中获取servletAPI对象的方法
  5. 转义字符_MySQL识别下面的转义序列
  6. Redis:安装
  7. android浮动搜索框
  8. C语言中输入输出函数
  9. 1.6 Indexing and Basic Data Operations--目录
  10. hbase总结:如何监控region的性能
  11. VS2012中启动性能分析 独占样本数的分析
  12. php get_magic_quotes_gpc() addslashes()
  13. java 读文件 解析
  14. Java设计模式遵循的七大原则
  15. python 10道面试陷阱题目
  16. 20190412wdVBA 排版
  17. 关于v$librarycache的几个字段含义
  18. iOS WebView中视频横屏播放返回导航栏在状态栏下面
  19. 在cmd启动一个win32程序,printf把信息输出到启运它的那个CMD窗口
  20. org.springframework.beans.TypeMismatchException: Failed to convert property value of type &#39;null&#39; to required type &#39;double&#39; for property &#39;band&#39;; nested exception is org.springframework.core.convert.Con

热门文章

  1. Linux设备驱动程序 之 kmalloc
  2. 基本PSO算法实现(Java)
  3. 在SQLAlchemy ORM中动态变更表名
  4. SQL-W3School-高级:SQL IN 操作符
  5. Swift 析构过程
  6. 12 Flutter仿京东商城项目 商品列表页面请求数据、封装Loading Widget、上拉分页加载更多
  7. python 内置数据结构 字符串
  8. React Native使用code-push实现热更新
  9. Django学习参考资料
  10. DOTS原则和愿景