欧拉函数


欧拉函数

#include <bits/stdc++.h>
using namespace std;
int cnt = 0;
int vis[100000];
int prim[100000];
int n = 100;
int main()
{
    memset(vis, 0, sizeof vis);
    memset(prim, 0, sizeof prim);
    for (int i = 2; i <= n; i++)
    {
        if (vis[i] == 0)
        {
            prim[++cnt] = i;
        }
        for (int j = 1; j <= cnt && i * prim[j] <= n; j++)
        {
            vis[i * prim[j]] = 1;
            if (i % prim[j] == 0)
            {
                break;
            }
        }
    }
    for (int i = 0; i < cnt; i++)
    {
        cout << prim[i] << " ";
    }
    return 0;
}

全篇的精华在于:

if(i % prim[j] == 0) break;

#include 
using namespace std;
vector pri;
const int MAXX = 100;
vector vis(100);
int main(){
    int n;
    cin>>n;
    vis.resize(n+10);
    for (int i = 2;i<=n;i++){
        if(vis[i]==0){
            pri.push_back(i);
        }
        for (int j = 0;j<=pri.size()&&i * pri[j]<=n;j++){
            vis[i*pri[j]]=1;
            if (i%pri[j]==0){
                break;
            }
        }
    }
    // for (auto v:pri){
    //     cout<

文章作者: anlen123
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 anlen123 !
 上一篇
快速排序 快速排序
快速排序视频教程 #include <bits/stdc++.h> using namespace std; void quck_sort(int a[],int l, int r){ if(l>=r) return ;
2020-05-07 anlen123
下一篇 
面试题 16.03. 交点 面试题 16.03. 交点
面试题 16.03. 交点给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值。 要求浮点型误差不超过10^-6。若有多个交点(线段重叠)则返回 X
2020-05-07 anlen123
  目录