欧拉函数,求素数

  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. }





附件列表

    原文地址:https://www.cnblogs.com/sober-reflection/p/cac04cd01e2a149341839a52eff990ce.html