欧拉函数,求素数

  1. /*=======================================================*\
  2. | 递推求欧拉函数phi(i)
  3. 欧拉函数\varphi(n)是小于或等于n的正整数中与n互质的数的数目
  4. \*=======================================================*/
  5. #define N 3000000
  6. __int64 phi[N + 100];
  7. void Euler()
  8. {
  9. int i, j;
  10. for(i = 1; i < N; i++)
  11. phi[i] = i;
  12. for(i = 2; i < N; i++)
  13. if(i == phi[i]) //若i为素数 第一次不是
  14. for(j = i; j < N; j += i) //让j累加i
  15. phi[j] = (phi[j] / i) * (i - 1); //求欧拉函数
  16. }
  17. /*=========================================================*\
  18. 筛选法求一个数的最大素因子在素数表中是第几个素数
  19. 利用筛选法得到素数,每次用一个素数更新它的所有倍数,
  20. 更新为这个素数的标号,
  21. 由于大的素数会更新小的素数,所以最后得到的就是最大素因子
  22. \*=========================================================*/
  23. #include <string>
  24. #define maxn 1000000
  25. int prime[maxn];
  26. void f()
  27. {
  28. memset(prime, 0, sizeof(prime));
  29. for(int i=2, flag=0; i<maxn; i++)
  30. {
  31. if(!prime[i])
  32. {
  33. flag++;
  34. for(int j=i; j<maxn; j+=i)
  35. prime[j] = flag;
  36. }
  37. }
  38. }





附件列表

     

    posted @ 2015-01-29 11:32  sober_reflection  阅读(389)  评论(0编辑  收藏  举报