题目描述:
就是求出两个数的公共质因子,之后找到他的倍数。
注意如果原来灯泡是关的,在按一下就是亮的,如果原来是亮的
在按一下就是关的。灯泡关开是和操作的次数有关系的。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int COUNT;
int isPrime[100000];
int data[100000];
void funPrime(){
for(int i = 2;i <= 100000;i++){
int flag = 1;
for(int j = 2;j*j <= i;j++){
if(i % j == 0){
flag = 0;
break;
}
}
if(flag)
isPrime[COUNT++] = i;
}
}
int main( void ){
int n,sum;
int cnt;
int a,b;
scanf("%d%d",&n,&sum);
COUNT = 0;
funPrime();
while(n--){
scanf("%d%d",&a,&b);
if(!a && !b) break;
cnt = 0;
memset(data,0,sizeof(data));
for(int i = 0;i < COUNT && a > isPrime[i] && b > isPrime[i];i++){
if(a % isPrime[i] == 0 && b % isPrime[i] == 0){
int index = isPrime[i];
for(int j = index;j <= sum;j += index){
data[j] = data[j] > 0 ? 0 : 1;
}
}
}
for(int i = 1;i <= sum;i++){
if(!data[i])
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}