博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2773 happy2006
阅读量:4945 次
发布时间:2019-06-11

本文共 1676 字,大约阅读时间需要 5 分钟。

昨天学习了欧拉,今天就来做了道欧拉的题目吧,这题有欧拉,还有运用到一个数学得知识--假设i与n互质,则n*自然数+i与n也是互质的,这样就能先找出与n互质的所有小于n的数字,然后后面就是一个循环,只是会按n*k(k=0,1,2,3,。。。)+i这种规律下去,只要求求就好了, 不过要注意他在第几个循环是比较麻烦的,人家指导我在求第几个循环的时候k要减一再除,就过了。。。

View Code
1 #include
2 #include
3 #include
4 #include
5 int s[1000100]; 6 int dp[1000100],dpn; 7 long k,m; 8 void prime()//欧拉 9 {10 int i,j;11 memset(s,0,sizeof(s));12 s[1]=1;13 /*for(i=2;i<=1000000;i++)14 s[i]=i;*/15 for(i=2;i<=1000000;i++)16 {17 if(!s[i])18 {19 s[i]=i-1;20 j=i+i;21 while(j<=1000000)22 {23 if(!s[j])24 s[j]=j;25 s[j]=s[j]/i*(i-1);26 j+=i;27 }28 }29 }30 return ;31 }32 33 int dpit()//找出所有互质的数字34 {35 int i,j;36 memset(dp,0,sizeof(dp));37 for(i=2;i<=m;i++)38 {39 j=i;40 if(!dp[i]&&m%i==0)41 while(j<=m)42 {43 dp[j]=1;44 j+=i;45 }46 }47 return 0;48 }49 int main()50 {51 prime();52 while(scanf("%ld%ld",&m,&k)!=EOF)53 {54 long a,b,t=0,x;55 dpn=0;56 a=(k-1)/s[m];57 b=k%s[m];58 if(!b)b=s[m];59 dpit();60 for(x=1;x<=m;x++)61 {62 if(!dp[x])63 t++;64 if (t==b)65 {66 a=m*a+x;67 printf("%ld\n",a);68 break;69 }70 }71 } 72 return 0;73 }

 

转载于:https://www.cnblogs.com/usp10/archive/2012/07/15/2592654.html

你可能感兴趣的文章
两千行PHP学习笔记
查看>>
nginx 负载配置
查看>>
js+canvas画随机4位验证码
查看>>
[ZJOI2008] 骑士
查看>>
(学) Oracle11G exp时可以导出空表
查看>>
datetime 模块,获取当前星期几
查看>>
Java多线程:队列与阻塞队列
查看>>
App优化 Systrace
查看>>
linux配置sphinx
查看>>
传说中的WCF(5):数据协定(a)
查看>>
[19/03/29-星期五] IO技术_File(文件)类(可操作文件,不能操作其里边内容,位于Java.io 包中)&递归遍历...
查看>>
Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义(转载)
查看>>
时间戳转换成日期格式,以及倒计时函数封装
查看>>
day21
查看>>
用route命令解决多出口的问题
查看>>
I/O多路复用和Socket
查看>>
Linux软件安装与卸载
查看>>
计算机编程语言
查看>>
网络爬虫
查看>>
C#变量与数据类型
查看>>