zoukankan      html  css  js  c++  java
  • 欧拉函数和欧拉筛法

    详细说明:https://www.cnblogs.com/zjp-shadow/p/9267675.html#autoid-3-3-0

    公式法求解单个欧拉函数

    //https://blog.csdn.net/elbadaernu/article/details/76945418
    ll euler(ll n)
    { //返回euler(n)   
           ll res=n,a=n;  
           for(ll i=2;i*i<=a;i++){  
               if(a%i==0){  
                   res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出   
                   while(a%i==0) a/=i;  
               }  
           }  
          if(a>1) res=res/a*(a-1);  
          return res;  
    }
    

    公式法打表

    void Euler()
    {
         euler[1]=1;  
         for(int i=2;i<MAX;i++)  
           euler[i]=i;  
         for(int i=2;i<MAX;i++)  
            if(euler[i]==i)  
               for(int j=i;j<MAX;j+=i)  
                  euler[j]=euler[j]/i*(i-1);
    }
    

    欧拉筛法求欧拉函数

    //#include<bits/stdc++.h>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    const int maxn=4e6+10;
    bool vis[maxn];
    long long a[maxn];
    long long p[maxn];
    int main()
    {
    	int n,m;
    	n=3e6;
    //	n=12;
    	memset(vis,0,sizeof(vis));
    	int tot=0;
    	a[1]=0;
    	for (int i=2;i<=n;i++)
    	{
    		if (!vis[i])
    		{
    			p[++tot]=i;
    			a[i]=i-1;
    		}
    		for (int j=1;j<=tot;j++)
    		{
    			if (p[j]*i>n) break;
    			vis[p[j]*i]=1;
    			if (i%p[j]==0)
    			{
    				a[i*p[j]]=a[i]*p[j];
    				break;
    			}
    			else a[i*p[j]]=a[i]*a[p[j]];
    		}
    	}
    }
    

    欧拉筛法求素数

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int maxn=16010;
    bool vis[maxn];
    int a[maxn];
    int main()
    {
    	int n=16000;
    	int tot=0;
    	memset(vis,0,sizeof(vis));
    	for (int i=2;i<=n;i++)
    	{
    		if (!vis[i]) a[++tot]=i;
    		for (int j=1;j<=tot;j++) if (a[j]*i<=n)
    		{			
    			vis[a[j]*i]=1;
    			if (i%a[j]==0) break;
    		}else break;//without this, we have unbelievable error????
    	}
    }
    
  • 相关阅读:
    Python运算符及逻辑运算
    Python编码、流程控制、格式化输出
    Docker私有仓库Harbor部署与使用
    react
    理事会
    关于elementui form表单过长,看不到未填项
    js
    vue 父子传值
    养生
    html知识点
  • 原文地址:https://www.cnblogs.com/reshuffle/p/12251576.html
Copyright © 2011-2022 走看看