题目链接

题意 :

定义不能被平方数整除的数为 Square-free Number

定义 F(i) = 有几对不同的 a 和 b 使得 i = a * b 且 a 、b 都是 Square-free

给出一个 N 求

分析 :

首先 Square-free 有一个性质

就是用唯一分解定理将 Square-free Number 分解后

素因数的指数都是 1

那么对于 a、b 是 Square-free Number

相乘 a * b 得出的 i 其不会有素因子的指数超过 2

然后你要熟悉欧拉筛

欧拉筛之所以是线性是因为、它保证筛出来的合数

都是用其最小质因子筛出来的、且做到不重复

定义 dp[i] = 题目所述的 F[i]  初始化  dp[1] = 1

然后在欧拉筛中进行动态规划、分几种情况

if  i  is prime number dp[i] = 2 ( 分别可以是 a 可以是 b )

if  ( i % prime[j] != 0 ) dp[i] = dp[i] * dp[prime[j]] ( i 不是 prime[j] 的倍数、此方程显然 )

if  ( i % prime[j] == 0){ (表示 i 至少包含了一个 prime[j] )

  if( i % (prime[j]^2) == 0 ) dp[i*prime[j]] = 0 ( i * prime[j] 肯定有素因数指数 > 2 )

  else if( i % prime[j] == 0 )  dp[i*prime[j]] = dp[i/prime[j]] ( i * prime[j] 会使得 prime[j] 这个因子指数为 2、所以就少了它的数量 )

}

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define ULL unsigned long long
  4.  
  5. #define scl(i) scanf("%lld", &i)
  6. #define scll(i, j) scanf("%lld %lld", &i, &j)
  7. #define sclll(i, j, k) scanf("%lld %lld %lld", &i, &j, &k)
  8. #define scllll(i, j, k, l) scanf("%lld %lld %lld %lld", &i, &j, &k, &l)
  9.  
  10. #define scs(i) scanf("%s", i)
  11. #define sci(i) scanf("%d", &i)
  12. #define scd(i) scanf("%lf", &i)
  13. #define scIl(i) scanf("%I64d", &i)
  14. #define scii(i, j) scanf("%d %d", &i, &j)
  15. #define scdd(i, j) scanf("%lf %lf", &i, &j)
  16. #define scIll(i, j) scanf("%I64d %I64d", &i, &j)
  17. #define sciii(i, j, k) scanf("%d %d %d", &i, &j, &k)
  18. #define scddd(i, j, k) scanf("%lf %lf %lf", &i, &j, &k)
  19. #define scIlll(i, j, k) scanf("%I64d %I64d %I64d", &i, &j, &k)
  20. #define sciiii(i, j, k, l) scanf("%d %d %d %d", &i, &j, &k, &l)
  21. #define scdddd(i, j, k, l) scanf("%lf %lf %lf %lf", &i, &j, &k, &l)
  22. #define scIllll(i, j, k, l) scanf("%I64d %I64d %I64d %I64d", &i, &j, &k, &l)
  23.  
  24. #define lson l, m, rt<<1
  25. #define rson m+1, r, rt<<1|1
  26. #define lowbit(i) (i & (-i))
  27. #define mem(i, j) memset(i, j, sizeof(i))
  28.  
  29. #define fir first
  30. #define sec second
  31. #define VI vector<int>
  32. #define ins(i) insert(i)
  33. #define pb(i) push_back(i)
  34. #define pii pair<int, int>
  35. #define VL vector<long long>
  36. #define mk(i, j) make_pair(i, j)
  37. #define all(i) i.begin(), i.end()
  38. #define pll pair<long long, long long>
  39.  
  40. #define _TIME 0
  41. #define _INPUT 0
  42. #define _OUTPUT 0
  43. clock_t START, END;
  44. void __stTIME();
  45. void __enTIME();
  46. void __IOPUT();
  47. using namespace std;
  48.  
  49. ;
  50.  
  51. bool isPrime[maxn];
  52. LL Prime[maxn]; ;
  53. LL dp[maxn];
  54. LL ans[maxn];
  55.  
  56. inline void init()
  57. {
  58. dp[] = ;
  59. ans[] = 1LL;
  60.  
  61. mem(isPrime, true);
  62.  
  63. ; i<=(maxn-); i++){
  64.  
  65. if(isPrime[i]){
  66. dp[i] = ;
  67. Prime[tot++] = i;
  68. }
  69.  
  70. ; j<tot && i*Prime[j]<=(maxn-); j++){
  71.  
  72. isPrime[i*Prime[j]] = false;
  73.  
  74. ){
  75.  
  76. ) dp[i*Prime[j]] = ;
  77. else dp[i*Prime[j]] = dp[i / Prime[j]];
  78.  
  79. break;
  80.  
  81. }else dp[i*Prime[j]] = dp[i] * dp[Prime[j]];
  82. }
  83. ans[i] = ans[i-] + (LL)dp[i];
  84. }
  85. }
  86.  
  87. int main(void){__stTIME();__IOPUT();
  88.  
  89. init();
  90.  
  91. int nCase;
  92. sci(nCase);
  93.  
  94. while(nCase--){
  95. int n;
  96. sci(n);
  97. printf("%lld\n", ans[n]);
  98. }
  99.  
  100. __enTIME();;}
  101.  
  102. void __stTIME()
  103. {
  104. #if _TIME
  105. START = clock();
  106. #endif
  107. }
  108.  
  109. void __enTIME()
  110. {
  111. #if _TIME
  112. END = clock();
  113. cerr<<"execute time = "<<(double)(END-START)/CLOCKS_PER_SEC<<endl;
  114. #endif
  115. }
  116.  
  117. void __IOPUT()
  118. {
  119. #if _INPUT
  120. freopen("in.txt", "r", stdin);
  121. #endif
  122. #if _OUTPUT
  123. freopen("out.txt", "w", stdout);
  124. #endif
  125. }

2018 南京预选赛 J Sum ( 欧拉素数筛 、Square-free Number、DP )的更多相关文章

  1. ACM-ICPC 2018 南京赛区网络预赛 J.sum(欧拉筛)

    题目来源:https://nanti.jisuanke.com/t/A1956 题意:找一个数拆成无平方因子的组合数,然后求前缀和. 解题思路:我们可以把某个数分解质因数,如果某个数可以分解出三个相同 ...

  2. HDU - 4548-美素数 (欧拉素数筛+打表)

    小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识.  问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为"美素数&quo ...

  3. 欧拉函数O(sqrt(n))与欧拉线性筛素数O(n)总结

    欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. POJ 2407.Relatives-欧拉函数 代码O(sqrt(n)): ll euler(ll n){ ll ans=n; ...

  4. [POJ1595]欧拉线性筛(虽然这道题不需要...)

    欧拉线性筛. 对于它的复杂度的计算大概思考了很久. procedure build_prime; var i,j:longint; begin fillchar(vis,sizeof(vis),tru ...

  5. poj2909 欧拉素数筛选

    刚刚学了一种新的素数筛选法,效率比原先的要高一些,据说当n趋近于无穷大时这个的时间复杂度趋近O(n).本人水平有限,无法证明. 这是道水题,贴代码出来重点是欧拉筛选法.我把原来普通的筛选法贴出来. / ...

  6. 【bzoj3944/bzoj4805】Sum/欧拉函数求和 杜教筛

    bzoj3944 题目描述 输入 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 输出 一共T行,每行两个用空格分隔的数ans1,ans2 样例输 ...

  7. Sum(欧拉降幂+快速幂)

    Input 2 Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multiple test cas ...

  8. HDU - 2824 The Euler function 欧拉函数筛 模板

    HDU - 2824 题意: 求[a,b]间的欧拉函数和.这道题卡内存,只能开一个数组. 思路: ϕ(n) = n * (p-1)/p * ... 可利用线性筛法求出所有ϕ(n) . #include ...

  9. 【BZOJ3944/4805】Sum/欧拉函数求和 杜教筛

    [BZOJ3944]Sum Description Input 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 Output 一共T行,每行两个用 ...

随机推荐

  1. gin框架博客实战教程2019web页面开发go语言实战博客开发

    视频教程: https://www.bilibili.com/video/av73698322?t=2400&p=5 资料下载地址(含数据库和main.go和controller里的代码) 注 ...

  2. 从入门到自闭之Python--Redis

    什么是Redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Server ...

  3. Tomcat中的Host和Engine级别的servlet容器

    这边文章主要介绍的是Host容器 和 Engine容器.如果你想在同一个Tomcat上部署运行多个Context容器的话,你就需要使用Host容器,从理论上来讲,如果你的Tomcat只想要部署一个Co ...

  4. Pytorch中nn.Conv2d的用法

    Pytorch中nn.Conv2d的用法 nn.Conv2d是二维卷积方法,相对应的还有一维卷积方法nn.Conv1d,常用于文本数据的处理,而nn.Conv2d一般用于二维图像. 先看一下接口定义: ...

  5. 第二十六篇 jQuery 学习8 遍历-父亲兄弟子孙元素

    jQuery 学习8 遍历-父亲兄弟子孙元素   jQuery遍历,可以理解为“移动”,使用“移动”还获取其他的元素.   什么意思呢?老师举一个例子: 班上30位同学,我是新来负责教这个班学生的老师 ...

  6. element-ui 中日期控件限制时间跨度

    支持点击今天及之前任意日期,前后跨度不超过31天,且不超过今天 <el-date-picker v-model="searchForm.dateRange" type=&qu ...

  7. im_master_search_specification

    中文 http://accel-archives.intra-mart.jp/2014-winter/document/iap/public_zh_CN/im_master/im_master_sea ...

  8. eclipse 导入外面的jar

    Eclipse中导入外部jar包 听语音 | 浏览:52620 | 更新:2014-12-07 20:59 | 标签:eclipse 1 2 3 4 5 6 7 分步阅读 在编写java代码时,为方便 ...

  9. javascript 元编程之 method_missing

    javascript 元编程之 method_missing 引言 要说元编程 ruby 中技巧太多了,今天来写的这个技术也来自于 ruby 中的灵感. method_missing 这个在 ruby ...

  10. 一个javascript面试题

    javascript面试题代码: <script type="text/javascript"> function fun(x,y){ console.log(&quo ...