按灯泡

来源:互联网 发布:离线数据大魔王 编辑:程序博客网 时间:2024/06/10 04:12
#include <iostream>


using namespace std;
int prime[1000030],isprime[100020],num[1000004];
int main()
{
    int temp=0,t,n,num1,num2,max,min,index,sum;
    for(int i=1;i<=1000000;i++)
        prime[i]=1;
    for(int i=2;i<=1000;i++)
        if(prime[i])
            for(int j=2;j<=1000000;j++)
                prime[i]=0;
    for(int j=2;j<=1000000;j++)
        if(prime[j])  isprime[temp++]=j;
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)
            num[i]=1;
        while(cin>>num1>>num2&&(num1||num2))
        {
            max=num1>num2?num1:num2;
            min=num1<num2?num1:num2;
            for(int i=0;i<temp&&isprime[i]<=min;i++)
                if(min%isprime[i]==0&&max%isprime[i]==0)
                {
                    index=isprime[i];
                    for(int j=index;j<=n;j+=index)
                        if(num[j]) num[j]=1;
                        else num[j]=0;
                }
        }
        sum=0;
        for(int i=1;i<=n;i++)
            sum+=num[i];
        cout<<sum<<endl;
    }
    //cout << "Hello world!" << endl;
    return 0;
}
0 0
原创粉丝点击