摘要: 题解:分析题目,就是一个裸的欧拉函数,于是AC。#include int eular(int n){ int ret=1,i; for(i=2;i*i1) ret*=n-1; return ret;}int main(){ int n; scanf("%d",&n); ... 阅读全文
posted @ 2013-12-27 16:00 forever97 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 题目大意:求出比给出数小的互质的质数个数。题解:直接用筛法求素数,稍微改编一下,将原先的布尔数组变为数组用来记录信息就可以了。注意点:大的数组定义要放在程序的开头,不要放在main里面,不然会栈溢出。#include #define max 1000000int prim[max]={0};int main(){ int n; int cnt=1; for(int i=2; i<max; ++i) { if(prim[i]) continue; for(int j=i; j<max; j+=i) prim[j]=cnt; ... 阅读全文
posted @ 2013-12-27 15:48 forever97 阅读(105) 评论(0) 推荐(0) 编辑
摘要: #include int gcd(int m, int n) { return m==0?n:gcd(n % m, m); } int main() { int m, n; while(scanf("%d%d",&m,&n)!=EOF) { printf("%d\n", m + n - gcd(m, n)); } return 0; } 题解:考虑切蛋糕为q块需要q刀,p块需要p刀,但是两者切痕有重叠,重叠部分为两者的最大公约数,所以问题就迎刃而解了。 阅读全文
posted @ 2013-12-27 15:09 forever97 阅读(111) 评论(0) 推荐(0) 编辑
摘要: #include long long gcd(long long a,long long b){ if (b==0) return a; return (gcd(b,a%b));}int main(){ int t; long long a,b,c,d; scanf("%d",&t); while (t--) { scanf("%I64d/%I64d%I64d/%I64d",&a,&b,&c,&d); a=a*b*c*d/gcd(a*d,c*b); b=b*d; if(a%b) {c=... 阅读全文
posted @ 2013-12-27 14:50 forever97 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 米勒罗宾素数测试:/* if n long long power(long long m,long long n,long long k){ long long b = 1; while (n>0) { if (n&1) b=(b*m)%k; n=n>>1; m=(m*m)%k; } return b;} bool Miller_Rabbin(long long t){ if (t==2) return true; if (power(2,t-1,t)!=1) return false; if (pow... 阅读全文
posted @ 2013-12-27 14:17 forever97 阅读(205) 评论(0) 推荐(0) 编辑