您的位置:首页 > 编程语言 > C语言/C++

南京理工大学第八届程序设计大赛(校外镜像) C count_prime

2016-04-20 23:17 260 查看
水题好多。。不过我更水。。 特别是最后的water1 也是醉了。。连样例都看不懂。 最后阿丹说 海平面是平的呀。。 瞬间搞笑了。。 然后博弈那题 目前还没接触。 听说也是水的。。。没打出自己水平吧。。 wakaka。。马上省赛了,还太菜太年轻 不能去。。 祝愿去的友人加油吧!

下面是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语言 容斥原理