求a~b内与n互素的数的个数 容斥原理

http://blog.csdn.net/yzj577/article/details/38152511

题意:给定你一个数n,请你统计出在[a,b]这个区间中和n互质的数的个数。两个数互质当且仅当他们除了1之外没有其他的公共因子或者他们最大的公共因子是1。1和任何数是互素的。

输入:第一行输入一个整数T(1 <= T <= 100),表示T组测试数据。接下来T行,每行3个整数a,b,n(1 <= a <=b <=10^15, 1<=n <= 10^9),用空格隔开。

输出:输出一个整数表示和n互质的数的个数。

测试用例

输入

2

1 10 2

3 10 5

输出

5

6

#include <iostream>
using namespace std;
#include <stdio.h>
#include <cmath>
int a[1000005];
int main()
{
    int T,n,k;
    scanf("%d",&T);
    while(T--)
    {
        long long A=0,B=-1;
        scanf("%d%d",&n,&k);
        a[0]=n;
        if(n==0)
        {
            printf("0\n");
            continue;
        }
        if(!k)
        {
            printf("-1\n");
            continue;
        }
        if(k>n)
        {
            printf("-1\n");
            continue;
        }
        int t=0,i=1,flag=-1;
        while(flag!=1)
        {
            a[i]=t+a[i-1]*k%10;
            t=a[i-1]*2/10;
            i++;

            if(a[i-1]*k==n&&t==0)
            {
                flag=1;
                printf("%d",a[0]);
                for(int q=i-1; q>=1; q--)
                    printf("%d",a[q]);
                printf("\n");
            }
        }
    }
    return 0;
}

你可能感兴趣的:(求a~b内与n互素的数的个数 容斥原理)