本文主要是介绍2016-NJUST-count number,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一次又一次的WA,是得到更好的AC的必经之路。
首先附上题目链接,当时并没有做出来,总感觉和欧拉函数有关,然而并没有用上,上网一搜,才发现竟然是容斥原理的入门题,天啊,这个都还没学,看来平时自己的积累才是王道,学习要主动,加油!!!
咦,为何题目图片传不上来。。。。。。
算了,直接上代码了
#include#include#define N 10000000
using namespace std;
int prime[N],cnt=0;
void creat_prime(int n) //欧几里得算法 求 输入n所有的质因数
{
int i;
for(i=2;i*i<=n;i++){
if(n%i==0){
prime[cnt++]=i;
while(n%i==0){
n/=i;
}
}
}
if(n>1) prime[cnt++]=n;
}
int fun(int up) //求从 1-UP 内, 与n有 公因子 的 数字 的数量
{
int c,i,j,tp,sum=0;
for(i=1;i<(1<< cnt;j++){ // 循环所有因子
if(i & (1<>T;
while(T--){
cin>>a>>b>>n;
ans=cnt=0;
creat_prime(n);
ans+=b-fun(b)-(a-1-fun(a-1)); // 这个 就不用 说了吧, 但还是 要注意 用 a-1 而不是a
cout<<
补充:刚学习了不用位运算,用数组来达到组合数的目的,原理大致相同,但写法不同,代码也上了,提醒自己一题多解 #include#include#define N 10000000
using namespace std;
int prime[N],cnt,tp[N],ans;
void creat_prime(int n)
{
int i;
for(i=2;i*i<=n;i++){
if(n%i==0){
prime[cnt++]=i;
while(n%i==0) n/=i;
}
}
if(n>1) prime[cnt++]=n;
}
int fun(int up)
{
int i,t=0,j,k,sum=0;
tp[t++]=-1; //保证奇加偶减
for(i=0;i>T;
while(T--){
scanf("%d%d%d",&a,&b,&n);
ans=cnt=0;
creat_prime(n);
ans=b-fun(b)-(a-1-fun(a-1));
cout<<
这篇关于2016-NJUST-count number的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!