欧拉函数计算及打表
1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%lld",&i) 6 #define f(i,a,b) for(int i=a;i<=b;i++) 7 #define pb(i) push_back(i) 8 #define ppb pop_back() 9 #define pf printf 10 #define dbg(args...) cout<<#args<<" : "<<args<<endl; 11 using namespace std; 12 #define Max 100001 13 int euler[Max]; 14 void init(){ 15 euler[1]=1; 16 for(int i=2;i<Max;i++) 17 euler[i]=i; 18 for(int i=2;i<Max;i++) 19 if(euler[i]==i) 20 for(int j=i;j<Max;j+=i) 21 euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出 22 } 23 //用通式算的 24 int Euler(int n){ //返回euler(n) 25 int res=n,a=n; 26 for(int i=2;i*i<=a;i++){ 27 if(a%i==0){ 28 res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出 29 while(a%i==0) a/=i; 30 } 31 } 32 if(a>1) res=res/a*(a-1); 33 return res; 34 } 35 int eulercal(int n){ 36 int ret=n; 37 for(int i=2;i<=sqrt(n);i++) 38 if(n%i==0){ 39 ret=ret/i*(i-1);//先进行除法防止溢出(ret=ret*(1-1/p(i))) 40 while(n%i==0) n/=i; 41 } 42 if(n>1) ret=ret/n*(n-1); 43 return ret; 44 } 45 int main() 46 { init(); 47 int a; 48 ll ans=0; 49 scan(a); 50 f(i,2,a){ 51 ans+=euler[i]; 52 } 53 pf("%lld",ans); 54 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!