标签:
题目大意:f(x)=n 代表1-x中与x互质的数字的个数。给出n个数字a[i],要求f(x)=a[i],求x的和。
思路:每个素数x 有x-1个不大于x的互质数。则f(x)=a[i],若a[i]+1为素数则x=a[i]+1,否则a[i]++直到得到素数位置。
#include<cstdio> #include<stdio.h> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<queue> #define INF 0x3f3f3f #define MAX 1000005 #define MOD 1000000007 using namespace std; long long p[MAX],v[MAX]; void GetPrime()//打素数表 { int i,j,cnt=1; memset(v,0,sizeof(v)); memset(p,0,sizeof(p)); p[1]=1; for(i=2; i<=1000005; i++) { if(!v[i]) { p[i]=1; for(j=i; j<=1000005; j+=i) { v[j]=1; } } } } int main() { GetPrime(); int T,i,j,cnt=1,k,n; long long sum; scanf("%d",&T); while(T--) { scanf("%d",&n); sum=0; for(i=1;i<=n;i++) { scanf("%d",&k); j=k+1; while(!p[j]) j++; sum+=j; } printf("Case %d: %lld Xukha\n",cnt++,sum); } return 0; }
LightOJ 1370 Bi-shoe and Phi-shoe 数论
标签:
原文地址:http://www.cnblogs.com/alan-W/p/5789067.html