南京理工大学第八届程序设计大赛(校外镜像) C count_prime
2016-04-20 23:17
260 查看
水题好多。。不过我更水。。 特别是最后的water1 也是醉了。。连样例都看不懂。 最后阿丹说 海平面是平的呀。。 瞬间搞笑了。。 然后博弈那题 目前还没接触。 听说也是水的。。。没打出自己水平吧。。 wakaka。。马上省赛了,还太菜太年轻 不能去。。 祝愿去的友人加油吧!
下面是C题的题解:虽然1A,但是这道题以前有接触过,不过之前的数据小,只要用gcd水水过就好了,那是肉鸽说大数据就要用容斥原理做,但是肉鸽只教妹子的说。。ORZ。。。
容斥原理,奇加偶减,适合位运算一下下
下面的是我的代码
下面是C题的题解:虽然1A,但是这道题以前有接触过,不过之前的数据小,只要用gcd水水过就好了,那是肉鸽说大数据就要用容斥原理做,但是肉鸽只教妹子的说。。ORZ。。。
容斥原理,奇加偶减,适合位运算一下下
下面的是我的代码
#include<cstdio> #include<cstring> #include<string> #include<iostream> #include<algorithm> using namespace std; #define maxn 100100 long long yin[maxn]; int cnt; long long rongchi(long long who) { long long ans=0; for(int i=1;i<(1<<cnt);i++) { long long test=1; long long num=0; for(int j=0;j<=cnt-1;j++) { if(i&(1<<j)) { test=test*yin[j]; num++; } } if(num&1) { ans=ans+who/test; } else { ans=ans-who/test; } } return who-ans; } int main() { int T; cin>>T; while(T--) { long long a,b,n; cin>>a>>b>>n; cnt=0; for(long long i=2;i*i<=n;i++) { if(n%i==0) { yin[cnt]=i; cnt++; while(n%i==0) { n=n/i; } if(n==0) break; } } if(n>1) { yin[cnt]=n; cnt++; } cout<<rongchi(b)-rongchi(a-1)<<endl; } return 0; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置