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

来源:互联网 发布:ctp交易接口源码 编辑:程序博客网 时间:2024/05/17 08:53

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;}

0 0